Package io.debezium.relational.history
Class KafkaDatabaseHistory
java.lang.Object
io.debezium.relational.history.AbstractDatabaseHistory
io.debezium.relational.history.KafkaDatabaseHistory
- All Implemented Interfaces:
DatabaseHistory
A
DatabaseHistory
implementation that records schema changes as normal SourceRecord
s on the specified topic,
and that recovers the history by establishing a Kafka Consumer re-processing all messages on that topic.- Author:
- Randall Hauch
-
Field Summary
Modifier and TypeFieldDescriptionstatic Field.Set
static final Field
private ExecutorService
private static final String
private static final String
private static final String
private Configuration
private static final short
The default replication factor for the history topic which is used in case the value couldn't be retrieved from the broker.private static final String
The name of broker property defining default replication factor for topics without the explicit setting.static final Field
static final Field
static final Field
private Duration
private static final org.slf4j.Logger
private int
private static final Integer
The one and only partition of the history topic.private static final int
private Duration
private static final String
private Configuration
private final DocumentReader
static final Field
static final Field
private static final String
private static final long
private static final long
private static final String
static final Field
private String
private static final int
private static final boolean
Fields inherited from class io.debezium.relational.history.AbstractDatabaseHistory
config, INTERNAL_PREFER_DDL, logger
Fields inherited from interface io.debezium.relational.history.DatabaseHistory
CONFIGURATION_FIELD_PREFIX_STRING, DDL_FILTER, NAME, SKIP_UNPARSEABLE_DDL_STATEMENTS, STORE_ONLY_CAPTURED_TABLES_DDL
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprivate void
checkTopicSettings
(String topicName) void
configure
(Configuration config, HistoryRecordComparator comparator, DatabaseHistoryListener listener, boolean useCatalogBeforeSchema) Configure this instance.protected static String
consumerConfigPropertyName
(String kafkaConsumerPropertyName) boolean
exists()
Determines if the database history entity exists; i.e.private static Field.Validator
forKafka
(Field.Validator validator) private short
getDefaultTopicReplicationFactor
(org.apache.kafka.clients.admin.AdminClient admin) private Long
getEndOffsetOfDbHistoryTopic
(Long previousEndOffset, org.apache.kafka.clients.consumer.KafkaConsumer<String, String> historyConsumer) private org.apache.kafka.clients.admin.Config
getKafkaBrokerConfig
(org.apache.kafka.clients.admin.AdminClient admin) private static boolean
void
Called to initialize permanent storage of the history.protected void
recoverRecords
(Consumer<HistoryRecord> records) void
start()
Start the history.void
stop()
Stop recording history and release any resources acquired sinceDatabaseHistory.configure(Configuration, HistoryRecordComparator, DatabaseHistoryListener, boolean)
.private void
boolean
Determines if the underlying storage exists (e.g.protected void
storeRecord
(HistoryRecord record) toString()
Methods inherited from class io.debezium.relational.history.AbstractDatabaseHistory
record, record, recover, skipUnparseableDdlStatements, storeOnlyCapturedTables
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface io.debezium.relational.history.DatabaseHistory
recover, recover
-
Field Details
-
LOGGER
private static final org.slf4j.Logger LOGGER -
CLEANUP_POLICY_NAME
- See Also:
-
CLEANUP_POLICY_VALUE
- See Also:
-
RETENTION_MS_NAME
- See Also:
-
RETENTION_MS_MAX
private static final long RETENTION_MS_MAX- See Also:
-
RETENTION_MS_MIN
private static final long RETENTION_MS_MIN -
RETENTION_BYTES_NAME
- See Also:
-
UNLIMITED_VALUE
private static final int UNLIMITED_VALUE- See Also:
-
PARTITION_COUNT
private static final int PARTITION_COUNT- See Also:
-
DEFAULT_TOPIC_REPLICATION_FACTOR_PROP_NAME
The name of broker property defining default replication factor for topics without the explicit setting.- See Also:
-
kafka.server.KafkaConfig.DefaultReplicationFactorProp
- Constant Field Values
-
DEFAULT_TOPIC_REPLICATION_FACTOR
private static final short DEFAULT_TOPIC_REPLICATION_FACTORThe default replication factor for the history topic which is used in case the value couldn't be retrieved from the broker.- See Also:
-
TOPIC
-
BOOTSTRAP_SERVERS
-
RECOVERY_POLL_INTERVAL_MS
-
RECOVERY_POLL_ATTEMPTS
-
INTERNAL_CONNECTOR_CLASS
-
INTERNAL_CONNECTOR_ID
-
KAFKA_QUERY_TIMEOUT_MS
-
ALL_FIELDS
-
CONSUMER_PREFIX
- See Also:
-
PRODUCER_PREFIX
- See Also:
-
PARTITION
The one and only partition of the history topic. -
reader
-
topicName
-
consumerConfig
-
producerConfig
-
producer
-
maxRecoveryAttempts
private int maxRecoveryAttempts -
pollInterval
-
checkTopicSettingsExecutor
-
kafkaQueryTimeout
-
USE_KAFKA_24_NEW_TOPIC_CONSTRUCTOR
private static final boolean USE_KAFKA_24_NEW_TOPIC_CONSTRUCTOR
-
-
Constructor Details
-
KafkaDatabaseHistory
public KafkaDatabaseHistory()
-
-
Method Details
-
hasNewTopicConstructorWithOptionals
private static boolean hasNewTopicConstructorWithOptionals() -
configure
public void configure(Configuration config, HistoryRecordComparator comparator, DatabaseHistoryListener listener, boolean useCatalogBeforeSchema) Description copied from interface:DatabaseHistory
Configure this instance.- Specified by:
configure
in interfaceDatabaseHistory
- Overrides:
configure
in classAbstractDatabaseHistory
- Parameters:
config
- the configuration for this history storecomparator
- the function that should be used to compare history records duringrecovery
; may be null if thedefault comparator
is to be usedlistener
- TODOuseCatalogBeforeSchema
- true if the parsed string for a table contains only 2 items and the first should be used as the catalog and the second as the table name, or false if the first should be used as the schema and the second as the table name
-
start
public void start()Description copied from interface:DatabaseHistory
Start the history.- Specified by:
start
in interfaceDatabaseHistory
- Overrides:
start
in classAbstractDatabaseHistory
-
storeRecord
- Specified by:
storeRecord
in classAbstractDatabaseHistory
- Throws:
DatabaseHistoryException
-
recoverRecords
- Specified by:
recoverRecords
in classAbstractDatabaseHistory
-
getEndOffsetOfDbHistoryTopic
-
storageExists
public boolean storageExists()Description copied from interface:DatabaseHistory
Determines if the underlying storage exists (e.g. a Kafka topic, file or similar). Note: storage may exist while history entities not yet written, seeDatabaseHistory.exists()
-
exists
public boolean exists()Description copied from interface:DatabaseHistory
Determines if the database history entity exists; i.e. the storage must have been initialized and the history must have been populated. -
checkTopicSettings
-
stop
public void stop()Description copied from interface:DatabaseHistory
Stop recording history and release any resources acquired sinceDatabaseHistory.configure(Configuration, HistoryRecordComparator, DatabaseHistoryListener, boolean)
.- Specified by:
stop
in interfaceDatabaseHistory
- Overrides:
stop
in classAbstractDatabaseHistory
-
stopCheckTopicSettingsExecutor
private void stopCheckTopicSettingsExecutor() -
toString
-
consumerConfigPropertyName
-
initializeStorage
public void initializeStorage()Description copied from interface:DatabaseHistory
Called to initialize permanent storage of the history.- Specified by:
initializeStorage
in interfaceDatabaseHistory
- Overrides:
initializeStorage
in classAbstractDatabaseHistory
-
getDefaultTopicReplicationFactor
private short getDefaultTopicReplicationFactor(org.apache.kafka.clients.admin.AdminClient admin) throws Exception - Throws:
Exception
-
getKafkaBrokerConfig
private org.apache.kafka.clients.admin.Config getKafkaBrokerConfig(org.apache.kafka.clients.admin.AdminClient admin) throws Exception - Throws:
Exception
-
forKafka
-