我们正在创建一个kafka队列,消息将从源系统发布到该队列中。现在,多个使用者可以连接到此队列以读取消息。在执行此操作时,消费者必须指定一个groupid,根据该groupid分发消息,如果两个应用程序具有相同的groupid,则两个应用程序都无法获取消息。有没有办法我可以强制每个应用程序。要拥有唯一的消费者组id?
osh3o9ms1#
kafka不是一个命名注册表,但是您可以使用许多其他策略来分配没有协调器的唯一组名:根据应用程序命名组。两个应用程序将各自获取所有数据,因为它们的名称是唯一的。根据要写入的数据存储区(例如jdbc连接字符串)命名组。如果您为不同的数据库启动一个应用程序示例,它将有自己的偏移量根据实现使用者的(规范)类名命名组。如果你的应用有两个消费者在不同的java类中实现,他们将得到不同的groupid为组分配一个随机值(例如uuid)。重新启动时,将创建一个新组。
osh3o9ms2#
不,如果不改变kafka的源代码,就无法做到这一点,因为consumergroup是kafka的一个主要(而且非常有价值)特性,它允许您避免使用v0.8中的低级consumer。当您想并行化单个主题的使用时(通常来自不同的主机)。但您也许可以建立一个独立的服务,向消费者发布名称。或者你可以指示所有消费者客户使用随机数作为名称后缀,或者类似的东西。
2条答案
按热度按时间osh3o9ms1#
kafka不是一个命名注册表,但是您可以使用许多其他策略来分配没有协调器的唯一组名:
根据应用程序命名组。两个应用程序将各自获取所有数据,因为它们的名称是唯一的。
根据要写入的数据存储区(例如jdbc连接字符串)命名组。如果您为不同的数据库启动一个应用程序示例,它将有自己的偏移量
根据实现使用者的(规范)类名命名组。如果你的应用有两个消费者在不同的java类中实现,他们将得到不同的groupid
为组分配一个随机值(例如uuid)。重新启动时,将创建一个新组。
osh3o9ms2#
不,如果不改变kafka的源代码,就无法做到这一点,因为consumergroup是kafka的一个主要(而且非常有价值)特性,它允许您避免使用v0.8中的低级consumer。当您想并行化单个主题的使用时(通常来自不同的主机)。
但您也许可以建立一个独立的服务,向消费者发布名称。或者你可以指示所有消费者客户使用随机数作为名称后缀,或者类似的东西。