apache-flink - Flink 中并行度的增加会降低/分散整体吞吐量

标签 apache-flink throughput

我的问题与 this 完全相同除了我的应用程序中的背压显示为“正常”。

我认为问题出在我的本地机器没有足够的配置,所以我创建了一台 72 核 Windows 机器,我从 Kafka 读取数据,在 Flink 中处理它,然后将输出写回 Kafka。我已经检查过,写入 Kafka Sink 不会引起任何问题。

我所寻找的是可能通过增加并行性导致任务槽之间吞吐量 split 的区域?

Flink 版本:1.7.2

Scala 版本:2.12.8

卡夫卡版本:2.11-2.2.1

Java版本:1.8.231

应用程序的工作:数据来自 Kafka(1 个分区),由 Flink 反序列化(此处的吞吐量为 5k/秒)。然后,反序列化的消息通过基本模式验证(此处的吞吐量为 2k/秒)。 即使将并行度增加到 2 后,级别 1(反序列化阶段)的吞吐量仍保持不变,并且不会按照预期增加两倍

我明白,没有代码,很难调试,所以我请求您针对这个问题提出建议,以便我可以回到我的代码并尝试。

最佳答案

We are using 1 Kafka partition for our input topic.

如果要并行处理数据,实际上需要并行读取数据。

并行读取数据有一定的要求。最重要的是源能够实际将数据分割成更小的工作 block 。例如,如果您从文件系统读取,您有多个文件,或者系统将文件分割为多个片段。对于 Kafka 来说,这必然意味着你必须有更多的分区。理想情况下,您拥有的分区数量至少与最大消费者并行度一样多。

5k/s 似乎是在一个分区上可以实现的最大吞吐量。您还可以根据想要实现的最大吞吐量来计算分区数。如果需要达到50k/s,至少需要10个分区。您应该使用更多来 catch 重新处理或故障恢复的情况。

分配工作的另一种方法是添加 manual shuffle step 。这意味着,如果保留单个输入分区,您仍然只能达到 5k/s,但之后工作实际上会重新分配并并行处理,这样您之后就不会看到吞吐量大幅下降。经过洗牌操作后,工作在并行下游任务之间分配得有些均匀。

关于apache-flink - Flink 中并行度的增加会降低/分散整体吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59084497/

相关文章:

java - 使用 DataStream API 进行批处理的 Flink Consumer - 我们如何知道何时停止以及如何停止处理 [ 2 倍 ]

testing - CUDA,测试吞吐量的小程序

c# - 如何将 HTTP 响应直接流式传输到网络

amazon-web-services - AWS Dynamodb 吞吐量

python - 爬行速度在接近尾声时急剧减慢

hadoop - Flink 转换为 parquet 错误

apache-flink - Flink Windows边界,水印,事件时间戳和处理时间

apache-flink - Flink大尺寸/小尺寸推进滑动窗口性能

java - FLINK CEP (Java 8) - 通过匹配模式持久化 "identity"

sharding - 对于以写入为主的 30 亿行,使用什么 NoSQL 数据存储