【发布时间】:2016-05-05 01:23:09
【问题描述】:
我们的生产遇到了一个 Kafka Event Consumption 现象。 总事件量为 34 亿个事件,包含 40 个分区。并且事件消息几乎均匀分布在每个分区上,每个分区有 80+ 百万个事件。
我们用 40 个线程分配 40 个消费者流(顺便说一句,我们使用的是 kafka 客户端 0.8.2)。
在消耗期间,在前 4 小时,每个分区的延迟保持下拉。在最后一个小时,2/3 的消费者流已经完成了事件消费。只有少于 10 个消费者流继续接收剩余事件。 对于 2-3 百万的相关少于 10 个分区的滞后范围。 这意味着在等待剩余的少数消费者完成任务时,消费者池的使用率逐渐回到空闲状态。
假设cpu核心&内存空间&网络带宽足够,任何提示确保Kafka消费者可以在一次内完成整体消费并且不再有消费者落后(扩大分区数除外)。
【问题讨论】:
-
你有没有看一下排队理论对你的情况的看法。长尾是意料之中的,还是您的分区中有统计工件?
-
长尾不是我们所期望的。理想情况下,我们希望每个消费者流在一次或之间的微小时间间隔内完成。
-
我对“期望”的意思是:假设您的分区分布是均匀的,并且您每条消息的计算时间具有一定的分布,正态或泊松之类的,那么可能是长尾正是高概率必然发生的事情。
标签: apache-kafka