首页 > 解决方案 > 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

如图所示,缩放几乎没有。有什么线索吗?谢谢。

标签: apache-flinkflink-streaming

解决方案


你真的应该使用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 分区是否行为异常(通过检查接收器的延迟,这将基于每个分区进行报告)。你可以寻找背压。


推荐阅读