如何解决Apache Storm 将任务分配给同一个执行器线程
我一直在为我的一个用例探索 Apache Storm。 Spout 将从我自己的 kafka 实现中读取数据并将其传递给螺栓。
我的拓扑对于单个消费者组的运行速度更快。如果我增加拓扑内的消费者组的数量,尽管我有专门用于所有消费者组的每个分区的 spout 和 bolts,但我可以看到处理速度很慢。
当我调试时,我发现在我的处理过程中发生了更多的上下文切换,因此记录了处理螺栓的线程名称。我可以看到,有时不同的执行程序线程会传递相同的 bolt id。
我怀疑因此可能会发生上下文切换,并且由于 cpu 线程缓存未命中,延迟可能会增加。
我的假设是否正确。如果这是行为,是否有任何选项可以通过同一执行程序线程设置任务,而不是将其传递给其他执行程序线程。
解决方法
经过进一步分析和调试,发现storm进程所在的vm存在CPU窃取现象。于是我就想,核数会不会有问题。
因此,我在具有大量内核和 CPU 窃取百分比的机器上运行了相同的进程,并且我的处理速度也没有发现任何缓慢。所以所有这些问题似乎都与机器配置有关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。