【问题标题】:What is difference b/w group.id, application.id and client.id in kafka?kafka 中的 b/w group.id、application.id 和 client.id 有什么区别?
【发布时间】:2019-09-09 17:53:28
【问题描述】:

我是 kafka 的新手,所以我只是在清除我的 kafka 概念。

我创建了一个简单的流式应用程序,它从具有两个分区的单个主题流式传输数据。我有这个应用程序的两个实例(我是在两个项目中基于相同的 application.id 说的)。当我启动应用程序的第三个实例时,我得到了错误。由此,我了解到 kafka 中的 application.id 被视为消费者组 ID,其中单个消费者可以从主题的单个分区中读取,而第三个消费者没有得到任何内容,因此它无法针对该主题进行存储。

我还尝试了另一种情况,在我的一个应用程序中更改了 application.id。因此,通过这样做,应用程序的第三个实例也开始正常工作。所以它证实了我的假设,application.id 被视为消费者组 id。

但我也注意到 group.id, client.id 也存在在那里,这让我感到困惑。在我们的项目中使用 group.id、client.id 的目的是什么,这些属性是什么以及它们是如何工作的。我为所有三个应用程序设置了相同的组 ID。

【问题讨论】:

标签: apache-kafka apache-kafka-streams


【解决方案1】:

简而言之:

  • client.id(对于 producerconsumer)设置单个 Kafka 生产者或消费者客户端的名称。
  • group.id 设置单个 Kafka 消费者客户端所属的 Kafka consumer group 的名称。
  • application.id 是 Kafka Streams 仅用于命名应用程序的设置,即使用 Kafka Streams 库的应用程序(可以在一个或多个应用程序实例上运行)。在幕后,application.id 也用于生成group.idclient.ids。有关详细信息,请参阅 application.id 文档。

【讨论】:

  • 如果application.id也是用来设置group.id的,那为什么还要为应用单独定义group.id,和application.id区别对待呢?
  • 在配置 Kafka Streams 应用程序时,您只需设置 application.id。 Kafka Streams 会根据需要自动配置group.idclient.ids。
  • 我的荣幸。对于你的另一个问题:我没有一个答案。我建议为此创建一个单独的 SO 问题。
  • 第三个要点的描述部分不正确。 Kafka Streams 使用 application.id 作为 client.id 的前缀。不是作为client.id。如果您不提供 client.id,则内部客户端的 client.id 将使用 - 进行初始化。见kafka.apache.org/documentation/streams/developer-guide/…
  • 啊,我应该澄清一下答案。请注意,我没有说application.id 用作client.id——旧答案说“它也用于设置group.idclient.ids”(“设置”不清楚)。 Kafka Streams 确实使用application.id 作为client.id 的前缀(请参阅文档),但请注意,KStreams 没有专门使用<application.id>-<random-UUID> 的合同(如您的评论中所述)。这是一个实现细节,可能在 Kafka 版本之间发生变化。我会澄清我的答案。
猜你喜欢
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多