线上使用Kafka0.72+Flume-ng 1.4的消息架构;流入到HDFS使用的Flume根据容量分析使用率太低了,决定从8个实例缩减到4个实例,在down实例的过程中的消息流入量per sec如下图:
这个Kafka的Topic共有10个partitions;在down实例的时候发生了一些抖动,不过是十分有规律并且可以预测的.
kafka的rebalance assigment是固定的;将partition按照consumer的label排序,然后进行取模分配:即第m个partition,如果一个consumer group有n个consumers,则分配到给第(m mod n)个consumer;其实根据这个算法完全可以预测出上图的波动了.另外,根据该算法,如果consumer的个数大于partition的数目那么多余的consumer不会消费到消息(https://issues.apache.org/jira/browse/KAFKA-687https://issues.apache.org/jira/browse/KAFKA-564);
不过,kafka的rebalance算法在0.8还是不成熟的:最明显的当属herd effect了;每当一个consumer加入或者删除,或者partition增加或者减少都会导致所有的consumer进行一次rebalance操作;0.9对rebalance做了新的design(https://issues.apache.org/jira/browse/KAFKA-264)引入了consumer co-ordination.
本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1300306,如需转载请自行联系原作者