【问题标题】:Can a spring kafka consumer run on multiple machines for the same groip?spring kafka 消费者可以在同一组的多台机器上运行吗?
【发布时间】:2016-02-04 23:46:47
【问题描述】:

Kafka 表示偏移量由消费者管理,同一组的消费者数量应该与分区数量一样多。
Spring集成说高级消费者中消费者流的数量是同一组的分区数。
那么,spring kafka 消费者代码可以运行在同一组的多台服务器上吗?如果是,如何知道偏移量不会在服务器之间发生冲突?

【问题讨论】:

标签: spring-integration apache-kafka


【解决方案1】:

根据 kafka 文档,如果实现了 group (http://kafka.apache.org/documentation.html#introduction),则每条消息仅由组中的一个消费者消费。每个消费者可以在一台机器上运行。两个消费者也可以在同一台机器上运行。在这种情况下,每个消费者可以是一个进程。

一个组可以包含多个消费者。分区可以通过一些算法分布在一组中的所有消费者之间。消费者的数量可以大于或小于分区的数量。

偏移量可以通过 zookeeper 的帮助来管理。但到目前为止,并非所有功能都已在某些客户端中实现。

至于您的用例,事实上,kafka 可能是“至少一次交付系统”。 Kafka 可以通过禁用生产者重试或在处理一批消息之前提交其偏移量来实现最多一次交付。实行“一次送达制”难度很大,需要合作。但是kafka提供了offset。所以有可能。更多详情请看http://kafka.apache.org/documentation.html#semanticshttp://ben.kirw.in/2014/11/28/kafka-patterns/https://dzone.com/articles/kafka-clients-at-most-once-at-least-once-exactly-o等。

根据我的个人经验,我花了很多时间来确保我的 kafka 系统是完全一次性交付系统。但是当服务器宕机时,一些消息可以被消费两次。但是我的测试是在独立的 kafka 服务器上完成的,在生产中总是使用 kafka cluter。所以,我认为它可以被认为是exactly-once系统。

【讨论】:

  • 感谢您的回答。但是,我想了解我的用例的更多具体细节:在同一个消费者组中,使用 spring 集成。我们如何才能保证偏移量只由 zookeper 管理,没有重叠?
  • 这里的消费者部分 (kafka.apache.org/documentation.html#intro_consumers) 说“消费者用消费者组名称标记自己,并且发布到主题的每条消息都被传递到每个订阅消费者组中的一个消费者实例。消费者实例可以在不同的进程或不同的机器上。"
  • 事实上,kafka 可能是“at-least-once 交付系统”。 “exactly-once delivery system”很难实现。 ben.kirw.in/2014/11/28/kafka-patterns
  • 但是试试这个dzone.com/articles/…
猜你喜欢
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 2019-04-07
相关资源
最近更新 更多