【问题标题】:Multiple ProducerIds are created when there are multiple instances of Producers有多个 Producer 实例时会创建多个 ProducerId
【发布时间】:2021-06-10 01:47:06
【问题描述】:

在.yaml文件中,我们设置了

spring.cloud.stream.kafka.binder.configuration.enable.idempotence as true.

现在当应用程序启动时,我们可以看到类似的日志

[kafka-producer-network-thread | test_clientId] org.apache.kafka.clients.producer.internals.TransactionManager - [Producer clientId=test_clientId] ProducerId set to 0 with epoch 0

当第一条消息被生成到主题时,我们可以看到另一个 ProducerId 正在被使用,如下面的日志所示

[Ljava.lang.String;@720a86ef.container-0-C-1] org.apache.kafka.clients.producer.KafkaProducer - [Producer clientId=test_clientId] Instantiated an idempotent producer.
[Ljava.lang.String;@720a86ef.container-0-C-1] org.apache.kafka.common.utils.AppInfoParser - Kafka version : 2.0.1
[Ljava.lang.String;@720a86ef.container-0-C-1] org.apache.kafka.common.utils.AppInfoParser - Kafka commitId : fa14705e51bd2ce5
kafka-producer-network-thread | test_clientId] org.apache.kafka.clients.Metadata - Cluster ID: -9nblycHSsiksLIUbVH6Vw
-9nblycHSsiksLIUbVH6Vw
1512361 INFO [kafka-producer-network-thread | test_clientId] org.apache.kafka.clients.producer.internals.TransactionManager - [Producer clientId=test_clientId] ProducerId set to 1 with epoch 0

一旦 ProducerId 设置为 1,当从该应用程序发送任何新消息时,都不会创建新的 ProducerId。

但是如果我们有多个应用程序正在运行(都连接到同一个 kafka 服务器), 然后在启动和发送第一条消息时也在该实例中创建新的 ProducerId。

请建议我们是否可以限制创建新的 ProducerId 并使用在创建应用程序时创建的同一个。 另外,由于创建了很多 ProducerId,我们有什么方法可以重用已经创建的?(假设应用程序有多个生产者,每个生产者创建多个 ProducerId)

【问题讨论】:

    标签: spring-boot spring-cloud spring-kafka spring-cloud-stream spring-cloud-stream-binder-kafka


    【解决方案1】:

    第一个生产者是临时的 - 创建它是为了在初始化期间查找主题的现有分区。它立即关闭。

    第二个生产者是用于后续记录发送的单个生产者。

    producerId 和 epoch 由 broker 分配。它们必须是独一无二的。

    使用新代理,第一个实例将获得 0 和 1,第二个实例将获得 2 和 3,4 和 5,...

    即使停止所有实例,下一个实例也会得到 7 和 8。

    你为什么担心这个?

    另一方面,如果您将client.id 设置为foo,您将始终在所有实例上获得foo-1foo-2

    【讨论】:

    • 感谢您的回复。我们的应用程序有多个生产者,并且该应用程序的多个实例连接到同一个 Kafka 服务器。所以想知道这些生产者ID的创建是否对Kafka的性能有任何影响,或者它会占用更多的磁盘空间。
    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2020-01-10
    • 2017-03-30
    • 2018-07-11
    • 2017-11-15
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多