雨翔河
首页
列表
关于
分布式服务扩展遇到 kafka 的小细节
2019-05-15 14:01
我们的服务使用了kafka队列,在消费kafka队列的时候是需要配置消费者线程数,单台机器的某topic使用了16个线程消费,姑且理解成单台机器16个消费者消费这个topic。 这个topic的partition有100个,目前有6台机器,总共 `16*6==96`个消费者,这就意味着有96个partition被占用着,这没什么问题,因为空闲了4个。 但是当机器横向扩展的时候,比如扩展到8台机器,那么线程数就是 `16*8=128` ,这就意味着有 28个消费者是闲着的。 起初观察到这个现象的时候是因为看到新添加的两台机器负载很低,负载远比旧的6台机器低,查看jstack日志发现消费者线程一直在kafka的某topic上poll,8号机器的16个消费者的状态是一样的poll状态。 这个现象很奇怪(使用camel消费的kafka),马上我打开kafkaManager找到这个topic,发现100个partition里面最后4个partition由7号机器在占领着消费,没有8号机器的ip在消费这个topic。 看到这里,一计算消费者数量就明白了,线程数大于partition数量的时候就会出现这种情况。 所以在使用kafka的分布式服务里,要注意到这个小细节, partition的数量和机器的消费者线程数要保持一个`恰当`的值,因为这很可能会使你横向扩展的服务并没有起到作用,只是在看戏。
类型:工作
标签:kafka,分布式,java
Copyright © 雨翔河
我与我周旋久
独孤影
开源实验室