kafka概念疑问

大佬,如果可以的话,可以帮我解答下我的疑问吗?多谢~

一、分区问题

  1. 如果一个topic分为3个分区,生成者发送消息的时候,是不是选择一个分区并发送?意思是 三个分区的消息是不同,而不是一个消息发送到三个分区?

  2. 如果一个topic分为3个分区,一个消费者组有两个消费者,一个消费者对应一个分区。那么剩余的一个分区的消息 是不是没消费者消费?还是消费者组的两个消费者中的一个去消费?如果是这样,那么一个消费者岂不是对应两个分区了?

  3. 如果一个topic分为3个分区,一个消费者组有两个消费者,一个消费者对应一个分区。那么消费者维护的offset 。是不是 其对应分区的offset.而不是对topic的offset?

  4. 一个消费者对应一个分区,是不是可以这样理解: (1).一个消费者只能固定消费一个分区的数据,并且不可改变消费的分区? 如果是这样理解。那么一个topic有三个分区,一个消费者组有两个消费者,那么岂不是另外的一个分区的消息 没消费者消费? (2).还有另外一种理解:一个topic有三个分区(A,B,C三个分区),一个消费者组有两个消费者(X,Y消费者)。 那么一个消费者组的两个消费者消费三个分区的消息。那么同一个分区的消息只能随机被同一个的消费者组 的一个消费者消费。但是如果这样理解。那么消费者维护的offset是什么呢? 或者说一个消费者组维护三个分区的offset,如果X消费者消费了A分区的消息,A分区对应的offset+1. 如果Y消费者消费者了A分区的消息,A分区的offset 也 +1 ?

二、消费者(队列和发布-订阅式)

  1. 生产者发送一个消息到broker,假设这个消息对应的topic有三个分区。这个消息存到三个分区的某一个。 那么消息被广播给所有订阅该topic的消费者/消费者组。消费者/消费者组收到该消息后然后通过pull方式 从服务器拉取消息并消费?





发表于: 18天前   最后更新时间: 18天前   游览量:96
上一条: 到头了!
下一条: 已经是最后了!

  • 请采纳、哈哈
    那我把答案也在贴一遍。。

    一、
    1、均匀的发到这3个分区中。
    2、2个消费者中的一个去消费剩余的分区。
    3、是的
    4、
    1)重启或故障则会被组中的其他成员消费,消费者数 <= 分区数,消费者多的话就会有消费者空闲着,少的话一个消费者会多消费几个分区。
    2)消费者组中的成员(X,Y),比如X分到了(A,B),Y分到了(C),那么X就维护A和B的offset,Y则维护C的offset。topic的分区在同一时刻只属于一个消费者。

    二、
    嗯,kafka的消费者是主动拉取消息的。