flink-structuring作业以最大化吞吐量

bvhaajcl  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(262)

我有4种Kafka主题,每种类型65个主题。目标是对数据进行一些简单的窗口聚合,并将其写入数据库。
拓扑将类似于:
Kafka->窗口->减少->数据库写入
在这个混合体的某个地方,我想/需要做一个联合-或者可能几个(取决于每次合并多少个主题)。
主题中的数据流范围从10k到>200k消息/分钟。
我有一个四节点的flink集群,每个节点有30个核心。如何构建这些拓扑以分散负载?

1tuwyuhd

1tuwyuhd1#

我写这个答案是假设65个相同类型的主题中的每一个都包含相同类型的数据。
这个问题最简单的解决方案是更改kafka设置,这样您就有4个主题,每个主题有65个分区。然后在程序中有4个数据源,具有高度并行性(65),这自然分布在集群中。
如果无法更改设置,我认为您可以做两件事:
一种可能的解决方案是创建flinkkafcumer的修改版本,其中一个源可以使用多个主题(而不是一个主题的多个分区)。有了这个改变,它的工作方式就好像使用了许多分区,而不是许多主题。如果您想使用此解决方案,我将ping邮件列表以获取对此的支持。无论如何,这将是对flink代码的一个有价值的补充。
您可以为每个源提供一个单独的资源组,这将为其提供一个专用的插槽。您可以通过“env.addsource(new flinkkafkaconsumer(…).startnewresourcegroup();”执行此操作。但是在这里,我们观察到您试图在一个拥有120个核心(因此可能有120个任务槽)的集群上执行260个不同的源。您需要增加插槽的数量来容纳所有任务。
我认为第一种选择更可取。

相关问题