【问题标题】:Flink input rate controlFlink 输入速率控制
【发布时间】:2020-07-09 16:22:11
【问题描述】:

我们正在使用 Flink 1.9.1。

我们有一个源、一个过程函数和一个接收器。应用程序消费和生产到 kinesis。

输入速率(由模拟器产生)为每秒 20 个事件。处理函数的每秒输出速率显示为每秒 14 个。源的背压指标显示为 OK(绿色)。事件计数(源发送的事件数)和流程函数接收的事件数也匹配,延迟非常小。

但是这个计数与模拟器推送的事件计数不匹配。此计数与每秒 14 次的速率相匹配。

现在我的问题是,Flink 会自动调节输入速率吗? 就我而言,如何将输入速率控制在每秒 14 次? 如果不是,我是否应该查看我遗漏的任何其他指标?

【问题讨论】:

  • 如何控制输入速率(每秒 20 个事件)?
  • @DavidAnderson,我们以每秒 20 个事件的速率将这些事件从模拟器推送到 Kinesis 流中。我们还使用另一个并行消费者对此进行了验证。

标签: apache-flink flink-streaming


【解决方案1】:

无法强制 Flink 管道以特定速率消耗事件。根据设计,网络堆栈中的缓冲有限,执行图中最慢的任务将决定管道消耗和处理事件的速率。

背压监测(即绿色 OK 信号)并不是确定是否出现背压的权威指南。只要工作能够稳步推进,可能并不代表有问题。您可以检查一些网络队列指标以获得更多信息:例如,inPoolUsageoutPoolUsageinputQueueLength。有关此主题的更多信息,请参阅 Flink Network Stack Vol. 2: Monitoring, Metrics, and that Backpressure Thing

每秒 20 个事件似乎很慢,所以我有点惊讶,有些东西跟不上那个速度,但这似乎就是正在发生的事情。

【讨论】:

  • 感谢详细的回复。进程函数发生了一些 IO,包括 API 调用,因此吞吐量较低。这是单并行和 1 个插槽。
  • 我们必须为同一个事件进行多次连续的 api 调用。我们尝试了带有迭代的异步 io。但是我们在一些答案中读到了迭代不支持检查点。因此,我们不得不满足于一个简单的过程函数。
  • 对。您可能想研究 Flink 的 Stateful Functions API,因为它支持任意通信模式(不限于 DAG)。还是不能使用一系列异步 i/o 运算符?
猜你喜欢
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
相关资源
最近更新 更多