Flink - 构建工作以最大化吞吐量

时间:2015-12-01 22:59:42

标签: java apache-flink flink-streaming

我有4种类型的kafka主题和每种类型的65个主题。目标是对数据进行一些简单的窗口聚合并将其写入数据库。

拓扑结构如下:

kafka - >窗口 - >减少 - > db write

在这个混合的某个地方,我想/需要做一个联盟 - 或者可能是几个(取决于每次合并多少个主题)。

主题中的数据流范围为10K到> 200K消息/分钟。

我有一个四节点的flink集群,有30个核心/节点。如何构建这些拓扑以分散负载?

1 个答案:

答案 0 :(得分:3)

我正在写这个答案,假设相同类型的65个主题中的每一个都包含相同类型的数据。

解决此问题的最简单方法是更改​​Kafka设置,使您拥有4个主题,每个主题包含65个分区。然后,程序中有4个数据源,具有高并行度(65),这自然地在集群中分布。

如果无法更改设置,我会看到两件事情可以做:

  • 一种可能的解决方案是创建FlinkKafkaConsumer的修改版本,其中一个源可能使用多个主题(而不是仅一个主题的多个分区)。通过这种更改,它几乎可以像使用许多分区一样工作,而不是很多主题。如果你想使用这个解决方案,我会ping邮件列表以获得一些支持。无论如何,这将是Flink代码的一个有价值的补充。

  • 您可以为每个源提供一个单独的资源组,这将为其提供专用插槽。您可以通过" env.addSource(new FlinkKafkaConsumer(...))。startNewResourceGroup();"来完成此操作。但是在这里,观察的是你尝试在具有120个核心的集群上执行260个不同的源(因此可能是120个任务槽)。您需要增加插槽数以容纳所有任务。

我认为第一种选择是更好的选择。