Kafka如何帮助实现排队和发布 - 订阅的抽象?

时间:2016-02-03 12:09:58

标签: apache-kafka

Kafka文件指出:

  

使用者使用使用者组名称标记自己,并且发布到主题的每条消息都会传递到每个订阅使用者组中的一个使用者实例。消费者实例可以位于不同的进程中,也可以位于不同的计算机上。

     

如果所有消费者实例都具有相同的消费者群体,那么这就像传统的队列平衡消费者的负担一样。

     

如果所有消费者实例都有不同的消费者群体,那么这就像发布 - 订阅一样,并且所有消息都会广播给所有消费者。

我对此有几点怀疑:
1)为什么发布的消息 到消费者组的单个消费者实例?消费者是否有责任从分区中读取内容?什么甚至意味着什么?
2)对特定主题感兴趣的消费者应该只读取他们感兴趣的分区。消费者群体的相关性是什么?
3)这有助于实现队列和发布者 - 子网的抽象?

1 个答案:

答案 0 :(得分:2)

在Kafka中,一个主题可以有多个分区,如果一个消费者组有X个消费者,那么该主题的分区将在消费者之间分配。 (即:如果您有一个带有2个分区的主题,并且您有一个具有2个消费者的消费者组,则每个消费者将使用1个分区,如果消费者组只有1个消费者,则该消费者将从2个分区读取) 消费者组基本上与具有主题/分区的不同消费者协调(是协调者)。如果您有4个相同CG的消费者和1个崩溃消费者组,则将崩溃消费者的分区提供给同一CG中可用的其他消费者,以便处理这些分区中的信息(如果CG没有重新分配不同的如果消费者崩溃,将永远不会读取某些分区。

如果消费者在同一个CG中,则发送到该主题的信息将在其中分发。如果每个消费者拥有不同的CG,那么他们将获得所有消息。

希望现在更清楚,Kafka文档需要改进。