Metadata
describes a Kafka cluster (and is created) for KafkaConsumer and KafkaProducer.
Client | refreshBackoffMs | metadataExpireMs | allowAutoTopicCreation | topicExpiryEnabled |
---|---|---|---|---|
|
on |
off |
||
|
on |
on |
A (seemingly) common usage pattern is as follows:
-
Request
Metadata
for a update (that simply turns theneedUpdate
flag on) -
Request (indirectly)
KafkaClient
to wake up if blocked on I/O -
Request
Metadata
to wait for metadata change (i.e. until the metadata version has changed)
Metadata
manages metadata update listeners that want to be notified about metadata updates. Listeners can be registered and deregistered.
Note
|
ConsumerCoordinator is the only entity to register a metadata update listener. |
Tip
|
Enable Add the following line to
Refer to Logging. |
synchronized boolean updateRequested()
updateRequested
…FIXME
Note
|
|
synchronized void failedUpdate(long now, AuthenticationException authenticationException)
failedUpdate
…FIXME
Note
|
failedUpdate is used when…FIXME
|
Cluster getClusterForCurrentTopics(Cluster cluster)
getClusterForCurrentTopics
…FIXME
Note
|
getClusterForCurrentTopics is used exclusively when Metadata is requested to update.
|
synchronized long timeToNextUpdate(long nowMs)
timeToNextUpdate
…FIXME
Note
|
|
int requestUpdate()
requestUpdate
simply turns the needUpdate flag on and returns the current version.
Note
|
|
synchronized void awaitUpdate(
final int lastVersion,
final long maxWaitMs) throws InterruptedException
awaitUpdate
…FIXME
Note
|
awaitUpdate is used when…FIXME
|
synchronized Cluster fetch()
fetch
returns current cluster information.
Note
|
fetch is used when…FIXME
|
void update(
Cluster newCluster,
Set<String> unavailableTopics,
long now)
update
turns the needUpdate flag off and increments version.
update
sets lastRefreshMs and lastSuccessfulRefreshMs internal registries to the given now
.
(only when topicExpiryEnabled is enabled, e.g. KafkaProducer) update
…FIXME
update
notifies the Metadata.Listeners that the metadata has been updated.
update
does getClusterForCurrentTopics for the cluster
when needMetadataForAllTopics flag is on and turns needUpdate flag off (that may have been turned on…FIXME).
update
sets the cluster to the given Cluster
when the needMetadataForAllTopics flag is off.
update
prints out the following INFO message to the logs with the cluster ID and notifies clusterResourceListeners that cluster has changed (only for a non-bootstrap cluster).
Cluster ID: [clusterId]
In the end, update
prints out the following DEBUG message to the logs:
Updated cluster metadata version [version] to [cluster]
Note
|
|
Metadata
takes the following when created:
Metadata
initializes the internal registries and counters.
Conditionally Requesting Update For New Topics (for KafkaConsumer) — needMetadataForAllTopics
Method
synchronized void needMetadataForAllTopics(boolean needMetadataForAllTopics)
needMetadataForAllTopics
requestUpdateForNewTopics when the input needMetadataForAllTopics
flag is enabled (i.e. true
) and the current needMetadataForAllTopics is disabled (i.e. false
).
needMetadataForAllTopics
sets needMetadataForAllTopics to be the input needMetadataForAllTopics
.
Note
|
|
synchronized void requestUpdateForNewTopics()
requestUpdateForNewTopics
sets lastRefreshMs to 0
and requests update.
Note
|
|
void addListener(Listener listener)
Note
|
addListener is used exclusively when ConsumerCoordinator is requested to addMetadataListener (when created).
|
MetadataRequest.Builder newMetadataRequestBuilder()
newMetadataRequestBuilder
simply requests the MetadataRequest
to create MetadataRequest.Builder for all topics.
Note
|
newMetadataRequestBuilder is used exclusively when Metadata is requested to newMetadataRequestAndVersion.
|
MetadataRequestAndVersion newMetadataRequestAndVersion()
newMetadataRequestAndVersion
simply creates a new MetadataRequestAndVersion
with MetadataRequest.Builder and the requestVersion.
Note
|
newMetadataRequestAndVersion is used exclusively when DefaultMetadataUpdater is requested to maybeUpdate.
|
Name | Description |
---|---|
|
Cluster with a subset of the nodes and topic partitions in a Kafka cluster.
|
|
The time (in millis) of the last successful update (and failed update)
|
|
|
|
|
|
Use updateRequested to know the current value. |
|
|
|