2014-09-01 75 views
3

enter image description here卡夫卡消费集团分区问题

我读了卡夫卡wiki,对这张图片有些问题。

  1. 对于消费者组A,C1,C2只能接收到两个分区消息,如C1只接收P0,C2只接收P1?

  2. 据我所知,一个消费者组映射一个主题,所以C1,C2必须有相同的主题,所以PO,P1,P2,P3具有相同的主题,是吗?

  3. 所以有一个矛盾,如果问题2是正确的,那么消费者组A和消费者组B具有相同的主题,所以它是一个消费者组映射一个主题的矛盾。

  4. C1如何控制P0,P1消息,如果P0,P1具有相同的主题,则表示C1会收到重复消息,如果不是,C1如何控制只有一个偏移量的不同消息?

  5. 关于“所有分区包含相同的主题,至少这是我如何解释这张照片”的问题。所以我假设,同一个主题名为“test”,然后一个生产者为此产生消息“Hello test”话题,这意味着C1,C2,C3,C4都会收到相同的信息? 对于答案,C1仍然会收到两次“Hello测试”?

  6. CG-A或CG-B可以接收不同的主题信息吗?

  7. 我没有看到Consumer Group的优势,“有时读卡夫卡消息的逻辑不关心处理消息偏移,它只是想要数据,所以提供高级消费者来抽象大部分消费卡夫卡事件的细节。“来自卡夫卡的维基, 你能否给我一个关于这张照片的消费群体的例子,就像你种子CG-A正在报告任务和CG-B正在监控?

  8. 是否意味着来自一个名为“test”的主题的P0,P1,P2,P3会发送不同的消息?但我跟着卡夫卡的wiki,如:

    a。 bin/kafka-server-start.sh config/server.properties

    b。 bin/kafka-topics.sh --create --zookeeper localhost:2181 - 复制因子1 --partitions 3 - 主题测试//分区为3

    c。 bin/kafka-console-producer.sh - 经纪商名单localhost:9092 - 专题测试

    d。 bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

    然后我在生产者中输入一些东西,然后消费者会显示这些消息?

那么这三个分区怎么会有不同的信息呢?

  1. 最后,如何使用命令行来模拟此图片?创建消费组,然后分配一些消费者,然后生成消息,并且我可以监视分区和消费者之间的映射关系,并从其他分区发送消息?

非常感谢

回答

3
  1. 在图片中,无论是消费者A组和消费者B组读取所有4个分区。 C1 - > [P0,P3],C2 - > [P1,P2] 让我们设想一下C1有问题,并且这个消费者终止。然后C2将接管剩余的两个分区,映射将变为C2 - > [P0,P1,P2,P3] 让我们假设您解决了问题,重新启动C1并在同一组中添加第三个用户C3。然后你可以得到一个如C1-> [P0],C2-> [P1,P2],C3-> [P3]的映射。主题的概念与分区有些分离,可以是主题列表由消费者群体消费,但为了简化,图片可能意味着仅显示两个独立消费者群体正在消费的一个主题。我们可以想象,CG-A正在对消息做一些简单的事情,并且可以仅用两个实例来管理这一点,而CG-B执行更复杂的处理并且需要更多的并行性。它们也可能具有不同的时间限制,以便CG-B可能更多是实时消费者(例如直接监控),而CG-A可能具有较少的实时限制(例如报告服务)。所有分区都包含相同的主题,至少我是这样解释这张图片的。

  2. 没有矛盾,卡夫卡是一个多用户消息系统。您可以让尽可能多的消费者群体独立于彼此使用相同的主题。

  3. 一个特定的消息只存在于其中一个分区中,因此不会收到重复的消息。出于冗余目的,Kafka也具有复制功能,但这是与分区不同的概念。复制未在图中所示,但是这将意味着你将服务器上有服务器1上类似[P0_leader,P1_follower,P2_follower,P3_leader]和[P0_follower,P1_leader,P2_leader,P3_follower] 2.

+0

谢谢为你的真棒回答。 我仍然对“所有分区包含相同的主题,至少这是我如何解读此图片”有疑问。 所以我假设,同一个主题名为“测试”,那么一个生产者产生消息“Hello test”为这个主题, 这意味着C1,C2,C3,C4都会收到相同的消息吗? 对于答案,C1仍然会收到两次“Hello测试”? 是错的,或者我误解了一些东西? – regrecall 2014-09-02 01:53:52

+0

再次感谢您的时间,这些问题让我担心这么久,我昨天开始了卡夫卡。 – regrecall 2014-09-02 02:16:59

+0

如果您有一个主题“测试”并生成消息“Hello test”并且不使用任何特定的消息密钥,那么此消息将最终位于其中一个分区中(可选地加上该分区的副本)。如果该消息恰好结束于例如P1,那么它可以被C2和C5消耗。 最后,消费者消费消息的次数实际上取决于该消费者,但对于常见情况,C1只会接收消息一次,然后按指定的时间间隔将最后消费的消息的消息ID作为一种检查点提交给Zookeeper 。 – Lundahl 2014-09-25 18:36:08