在Kafka中强制使用唯一的使用者组ID

时间:2016-02-26 09:12:36

标签: apache-kafka kafka-consumer-api consumer

我们正在制作一个Kafka Queue,从源系统发布消息。现在,多个消费者可以连接到此队列以阅读消息。

在执行此操作时,消费者必须指定基于其分发消息的groupId,如果两个应用具有相同的groupId,则两者都不会获得消息。

有没有办法可以强制执行每个应用。拥有一个独特的消费者群体ID?

2 个答案:

答案 0 :(得分:7)

Kafka不是命名注册表,但您可以使用许多其他策略在没有协调员的情况下分配唯一的组名:

  • 根据应用程序命名组。两个应用程序将分别获取所有数据,因为它们的名称是唯一的。
  • 根据组写入的数据存储命名组(例如jdbc连接字符串)。如果您为其他数据库启动应用程序实例,它将具有自己的偏移量
  • 根据实现使用者的(规范)类名称命名该组。如果您的应用程序在不同的Java类中实现了两个使用者,那么他们将获得不同的groupIds
  • 为组分配随机值(例如UUID)。在重新启动时,将创建一个新组。

答案 1 :(得分:0)

不,如果不改变Kafka源,就没有办法做到这一点,因为消费者群体是Kafka的一个主要(且非常有价值)功能,可以让你避免使用v0.8中的低级别消费者。当你想要并行化单个主题的消费时(通常来自不同的主机)。

但您可以设置一个向消费者发布名称的独立服务。或者您可以指示所有消费者客户使用随机数作为名称后缀,或类似的东西。