Storm-kafka-client spout在不同分区上以不同速度消耗消息

时间:2018-07-11 10:45:11

标签: apache-kafka apache-storm

我有一个由5个节点组成的Storm集群,并且在同一节点上安装了一个kafka集群。

  • 风暴版本:1.2.1
  • kafka版本:1.1.0

我还有10个分区的kafka主题。

现在,我想使用该主题的数据并通过风暴对其进行处理。但是消息消耗速度真的很奇怪。

出于测试原因,我的风暴拓扑仅包含一个组件-kafka spout,并且我始终将kafka spout并行度设置为10,这样一个分区将只能由一个线程读取。

当我仅在 1个工作器上运行此拓扑时,所有分区将被快速读取,并且延迟几乎相同。(很小)
当我在 2个工作器上运行此拓扑时,将快速读取 5个分区,但是读取其他 5个分区的速度很慢。
当我在 3或4个工作线程上运行此拓扑时,将快速读取 7个分区,而非常慢地读取其他 3个分区。< br /> 当我在 5个工作上运行此拓扑时,将快速读取 8个分区,而缓慢地读取其他 2个分区

另一个奇怪的事情是,当我在配置kafka喷口时使用不同的消费者组ID 时,测试结果可能会有所不同。
例如,当我使用特定的组ID并在 5个工作线程上运行拓扑时,只能快速读取 2个分区。与使用另一个组ID的测试恰好相反。

我编写了一个简单的Java应用程序,该应用程序调用了高级kafka jave api。我在5个风暴节点的每个节点上运行它,发现它可以非常快速地为每个分区消耗数据。因此可以排除网络问题。

以前有人遇到过同样的问题吗?还是有什么想法会导致这种奇怪的问题?

谢谢!

0 个答案:

没有答案