前段时间通过网上查找和自己测试仔细研究了partition和customer关系以及工作中遇到的storm并行度调整的问题,认真梳理了一下现总结如下:
一、先说kafka部分:
produce方面:
如果有多个分区,发送的时候按照key值hashCode%partitionNum哈希取模分区数来决定该条信息发往哪个partition, 这里可以自定义partition的分发策略,只要实现Partitioner接口就好,可以自定义成随机分发或者fangwang发往指定分区;
customer方面:
对于topic中的partition来说,一个partition只允许一个customer来消费,同一个partition上不允许customer并发;
Partition数量>customer数量时:一个consumer会对应于多个partitions,这里主要合理分配consumer数和partition数,否则会导致partition里面的数据被取的不均匀 。最好partiton数目是consumer数目的整数倍,所以partition数目很重要,比如取24,就很容易设定consumer数目 。
Partition数量<customer数量时: