apache-flink - Flink 流式传输作业未按预期缩放
问题描述
我们正在测试 Flink 的扩展能力。但是我们发现缩放不起作用,无论是增加更多的插槽还是增加任务管理器的数量。如果不是接近线性的缩放性能,我们会期望线性,但结果甚至显示退化。感谢任何评论。
测试详情,
-VMWare 球体
- 只是一个简单的通过测试,
- auto gen source 3mil records, each 1kb in size, parallelism=1
- source pass into next map operator, which just return the same record, and sent counter to statsD, parallelism is in cases = 2,4,6
3 个 TM,共 6 个插槽 (2/TM) 每个 JM/TM 有 32 个 vCPU,100GB 内存
结果:
2 个插槽:26 秒,3mil/26=115k TPS
4 个插槽:23 秒,3mil/23=130k TPS
6 个插槽:22 秒,3mil/22=136k TPS
如图所示,缩放几乎没有。有什么线索吗?谢谢。
解决方案
你真的应该使用RichParallelSourceFunction。如果您关心使来自不同源实例的记录不同,您可以从RuntimeContext获取每个实例的索引,这可以通过 RichFunction 接口中的 getRuntimeContext() 方法获得。
此外,Flink 有一个内置的statsd 指标报告器,您应该使用它而不是自己滚动。此外,已经为您计算了numRecordsIn、numRecordsOut、numRecordsInPerSecond 和 numRecordsOutPerSecond ,因此无需自己创建此工具。您还可以通过 Flink 的 Web 界面或 REST API 访问这些指标。
至于为什么您可能会遇到 Kafka 消费者的可扩展性差的问题,有很多事情可能会导致这种情况。如果您正在使用事件时间处理,则空闲分区可能会阻止事情(请参阅https://issues.apache.org/jira/browse/FLINK-5479)。如果流是键控的,那么数据倾斜可能是一个问题。如果您要连接到外部数据库或服务,那么它很容易成为瓶颈。如果检查点配置错误,可能会导致这种情况。或者网络容量不足。
我将通过查看 Flink Web UI 中的一些关键指标来开始调试。子任务之间的负载是否平衡良好,还是偏斜?您可以打开延迟跟踪并查看其中一个 kafka 分区是否行为异常(通过检查接收器的延迟,这将基于每个分区进行报告)。你可以寻找背压。
推荐阅读
- c - C程序中相同首字母的连接(不区分大小写)
- mailgun - 在收件人详细信息中隐藏邮件列表地址
- python-3.x - 如何使用 OpenCV 将实时视频发送到 Tensorflow?
- asp.net-mvc - 将 API 的图像结果显示到 WEB
- python - 如何改进我的 Python NetworkX 图的布局
- python-3.x - 在 Cloud Functions (Python) 中对 Google Firestore 进行身份验证
- php - 如何在sql中显示top 3的业务?
- .net - 不支持文化 1033 (0x0409)
- jquery - 如何删除没有 ID / Class 但基于其 scr 的 iframe
- php - 在数据库中插入两个不同的数组,从动态输入到同一个表