【问题标题】:can kafka consumers with same group.id consume different topics separately具有相同group.id的kafka消费者可以分别消费不同的主题吗
【发布时间】:2018-02-14 23:07:18
【问题描述】:

我们在不同的主机上有多个 kafka 消费者。

Consumer-1 (on server-1) consumes data from Topic-1. 

Consumer-2 (on server-2) consumes data from Topic-2. 

The group.id of Consumer-1 and Consumer-2 are the same.

预计 Consumer-1 和 Consumer-2 可以分开运行,分别处理来自 Topic-1 和 Topic-2 的消息。

但是,我们发现有时当我们重新启动 Consumer-2(在 server-2 上)时,它会尝试获取有关 Topic-1 的元数据并最终失败。如果我们再次重新启动它,它可能会获取有关 Topic-2 的元数据并按预期工作。

我很困惑,发现this page,如果是正确的,主题重新平衡的关键是像 (topic:consumer_group_id) ,为什么它不稳定?

我们使用的是 kafka 版本 0.11.0.1。

【问题讨论】:

  • 当您说“当我们重新启动 Consumer-2(在服务器 2 上)时,它将尝试获取有关 Topic-1 的元数据并最终失败”时,这是不是您得到的错误。 ? “获取具有相关 ID {} 的元数据时出错:{}”如果不是,您在失败之前收到的错误是什么?
  • 正如帖子中提到的,有 2 个不同的消费者订阅了 2 个不同的主题可以具有相同的组 ID。
  • @AkhilanandBenkalVenkanna 是的,失败前的警告类似于“在获取具有相关 ID {} 的元数据时出错”,所以我可以知道它正在尝试从意外主题中获取数据。

标签: java apache-kafka kafka-producer-api


【解决方案1】:

使用手动分区分配Consumer.assign 方法而不是subscribe。使用assign,您可以更好地控制消费者应该从哪个主题分区读取数据。你也可以在 Kafka 中使用相同的group.id提交偏移​​量

注意:使用assign 机制,组内不会发生任何重新平衡机制。

【讨论】:

  • 是的,正如你所说,当组成员或集群和主题元数据发生变化时,不会触发重新平衡操作,实际上,每个主题有多个消费者来消费多个分区,如果一个消费者崩溃了,来自分区的消息不会被自动处理,所以我认为这对我们没有好处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多