关于kafka的partition

** 同一个时刻**一个 partition 只能分配给一个 consumer ,但consumer可以同时负责多个partition。我们在实

际应用时,应该做到一个consumer尽量一个partition

分区数据量不均衡

项目中给kafka的一个topic下划分了四个partition,但实际压测的时候发现数据倾斜严重,有时候数据全在一

个partition上。解决方案即send时 要指定 key,kafka会根据key + 某种算法如hash,去决定消息落在哪个

partition上

PS: 不指定 key,应该是对应的 hash 值,取模到对应的分区上。

spring-integration-kafka:

在使用spring-integration-kafka做消费者的时候,发现CPU和内存占用量占用非常的大,后来又发现不管生产者发送了多少数据,Kafka的Topic中一直没有数据,这时候才知道spring-integration-kafka会将Topic中的数据全拉到本地,缓存起来,等待后续的处理。

解决方法:

[xml]

1
2
3
<int:channel id="inputFromKafka">
<int:queue capacity="25"/> --这里加个配置,相当于缓存多少数据到本地
</int:channel>

死循环消费(消费者位移提交失败导致数据一直重复消费)

kafka客户端在消费时会先拉一批数据到本地来,然后等这批数据消费完成后,会提交offset,然后partition

会被分配给别的从consumer。当时的情况是consumer消费能力不行,无法在规定时间内消费完成,自动提

交了offset,导致这批数据继续被别的消费者消费,从而导致重复消费

解决方案:

1.自动改手动

2.调参