关于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 | <int:channel id="inputFromKafka"> |
死循环消费(消费者位移提交失败导致数据一直重复消费)
kafka客户端在消费时会先拉一批数据到本地来,然后等这批数据消费完成后,会提交offset,然后partition
会被分配给别的从consumer。当时的情况是consumer消费能力不行,无法在规定时间内消费完成,自动提
交了offset,导致这批数据继续被别的消费者消费,从而导致重复消费
解决方案:
1.自动改手动
2.调参