java - 队列消息传递/消费者组的工作流程?

标签 java apache-kafka

假设我有消费者组 G1,其中有三个消费者 C1、C2 和 C3。全部订阅具有单个分区的主题 1。现在Producer在partition1、broker上生成了3条消息 将向每个消费者移交 1 条消息。 对吗?

但是在阅读了队列消息传递/消费者组的工作流程部分中的粗体文本后,我感到很困惑 在kafka tutorial

  1. 单个消费者订阅特定主题,假设“Topic-01”和“Group ID”为 “组-1”。
  2. Kafka 以与 Pub-Sub 消息传递相同的方式与消费者交互,直到新的 消费者使用与“Group-1”相同的“Group ID”订阅同一主题“Topic-01”。
  3. 一旦新的消费者到来,Kafka就会将其操作切换到共享模式并共享 两个消费者之间的数据。 这种分享会一直持续到消费者数量达到 达到为该特定主题配置的分区数量。
  4. 一旦消费者数量超过分区数量,新的消费者将 在现有消费者取消订阅之前,不会收到任何进一步的消息。 出现这种情况是因为 Kafka 中的每个消费者都会被分配至少一个 分区,一旦所有分区都分配给现有的消费者,新的 消费者将不得不等待。

如果我按照第 3/4 点进行操作,那么只有消费者 1 才能获取所有消息,因为消费者数量(3)大于分区数量(1)?这是否意味着我需要总共创建 3 个分区,并且组 G1 将订阅所有 3 个分区,以便每个消费者各收到一条消息?

最佳答案

If i go by point 3/4, will only consumer1 will get all messages as number of consumer (which is 3) is greater than no of partition(which is 1)

是的。它可以是三者之一。

Does it mean i need to create 3 partitions in all and group G1 will subscribe with all 3 partitions so that each consumer gets one message each ?

是的,如果您的主题有 3 个或更多分区,那么所有 3 个消费者都将开始从您的主题进行消费。

关于java - 队列消息传递/消费者组的工作流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44701232/

相关文章:

apache-kafka - kafka 异步发送不是真的异步吗?

java字符串到日期时间的转换问题

java - 如何构建带有 map 坐标的字符串?

apache-kafka - 汇合平台 : Schema Registry Subjects

apache-kafka - 连接 Kafka 3.0 中的问题 - org.apache.kafka.common.KafkaException : Failed to load SSL keystore

Python Kafka 客户端 - 没有错误但无法正常工作

java - 同时按下鼠标按钮无法正常工作

Java飞行记录器分析摘要提取

java - Objective-C 中的接口(interface)类型等效吗?

docker - 无法从网络设备正确发送到kafka-docker