你好, 写 Kafka 分区的策略取决于使用的 Kafka Sink 的 Partitioner [1],默认使用的是 Kafka 的 Default Partitioner,底层使用了一种称之为黏性分区的策略:对于指定 key 的数据按照对 key hash 的方式选择分区写入,对于未指定 key 的数据则随机选择一个分区,然后“黏住”这个分区一段时间以提升攒批效果,然后攒批结束写完后再随机换一个分区,来在攒批效果和均匀写入间做一个平衡。 具体可以参考 [2]。
因此,默认配置下不存在你说的遍历导致攒批效果下降的问题,在达到 Kafka 单分区写入瓶颈前,只是扩大写入并发就会有比较好的提升写入吞吐的效果。不过在一些特殊情况下,比如如果你并发很高,单并发写入 QPS 极低,以致于单次攒批周期内甚至只有一两条消息,导致攒批效果差,打到 Kafka 写入瓶颈,那么降低并发可能反而能通过提升攒批效果的形式,配合写入压缩降低写入 Kafka 流量,提升写入吞吐。 [1] https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/table/kafka/#sink-partitioning [2] https://www.cnblogs.com/huxi2b/p/12540092.html ________________________________ From: chenyu_opensource <chenyu_opensou...@163.com> Sent: Wednesday, March 13, 2024 15:25 To: user-zh@flink.apache.org <user-zh@flink.apache.org> Subject: flink写kafka时,并行度和分区数的设置问题 您好: flink将数据写入kafka【kafka为sink】,当kafka topic分区数【设置的60】小于设置的并行度【设置的300】时,task是轮询写入这些分区吗,是否会影响写入效率?【是否存在遍历时的耗时情况】。 此时,如果扩大topic的分区数【添加至200,或者直接到300】,写入的效率是否会有明显的提升? 是否有相关的源码可以查看。 期待回复,祝好,谢谢!