在kafka中,group.id、application.id和client.id有什么区别?

8

我对kafka还不熟悉,正在学习kafka的相关概念。

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

我还尝试了另一种情况,其中我更改了我的某个应用程序中的application.id。通过这样做,应用程序的第三个实例也开始正常工作。因此,我的假设得到了确认,即application.id被视为消费者组ID。

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


2
检查一下Kafka参考文档怎么样?https://kafka.apache.org/10/documentation/streams/developer-guide/config-streams.html#application-id - mazaneicha
1个回答

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

2
如果application.id也用于设置group.id,那么为什么还需要单独为应用程序定义group.id,并且它与application.id有何不同处理方式? - Sagar
2
当您配置Kafka Streams应用程序时,只需设置“application.id”。 Kafka Streams将根据需要自动配置“group.id”和“client.id”。 - miguno
很高兴为您服务。关于您的另一个问题:我暂时没有答案。建议您在Stack Overflow上创建一个单独的问题来询问。 - miguno
第三个要点的描述部分不正确。Kafka Streams使用application.id作为client.id的前缀,而不是作为client.id本身。如果您没有提供client.id,则内部客户端的client.id将使用<application.id>-<random-UUID>进行初始化。请参阅https://kafka.apache.org/documentation/streams/developer-guide/config-streams.html。 - Kaushalya
啊,我应该澄清一下答案。请注意,我并没有说application.id被用作client.id——旧的回答中说:“它也用于设置group.idclient.id”(其中“设置”不够清楚)。Kafka Streams确实使用application.id作为client.id的前缀(参见文档),但请注意,没有任何契约规定KStreams将特别使用<application.id>-<random-UUID>(就像你的评论中提到的那样)。这是一个实现细节,可能会在Kafka版本之间发生变化。我会澄清我的答案。 - miguno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接