三个Partition,C1在消费这三个分区。新开第二个消费者后,0和1分区由C1消费,2分区由C2消费,这是由于C2启动后,消费者组进行了负载均衡,这从kafka底层代码可以看出。但是C2突然关闭后,2分区的所有者立刻变成了C1,请问这个阶段的负载均衡是由哪里进行的?底层代码还是集群自己?
首先,当“代码”与集群建立连接之后,如果没有设置手动指定分区话,由“代码”告知集群,我要pull所有分区的消息。看到了没,谁清楚你的规则?只“代码”吧,当有一个消费者加入或离开的时候,谁清楚? 只有集群知道吧!是相互的。
C2非正常结束,在执行中突然关闭的,这样的话,就靠集群自己在检查了是吗?
是的,看下 https://www.orchome.com/203
手动指定分区是不会平衡的
生产者那边是把一个文件作为一个message传进来的,并且一个完整的文件放在一个分区里面,那消费者读取的时候,多个分区不是并行读的吗,这样会不会破坏文件的完整性,使读到的文件不能连贯?
不会破坏,一个消息是完整的放在一个分区中,多个消费者读取多个分区的时候,只有其中1个消费者拿到这个消息,不会破坏连贯性。
如果还有新的问题,重新开帖吧
你的答案