Flink KafkaSink分区配置的不同版本对比

2024-04-19 06:52

本文主要是介绍Flink KafkaSink分区配置的不同版本对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Flink KafkaSink分区配置的不同版本对比

在不同版本的Flink中,KafkaSink 分区默认配置方式可能会有一些变化。以下是摘自Flink官方文档不同版本的原文:

1. Flink版本:1.12~1.19

Sink 分区 #
配置项 sink.partitioner 指定了从 Flink 分区到 Kafka 分区的映射关系。 默认情况下,Flink 使用 Kafka 默认分区器 来对消息分区。默认分区器对没有消息键的消息使用 粘性分区策略(sticky partition strategy) 进行分区,对含有消息键的消息使用 murmur2 哈希算法计算分区
为了控制数据行到分区的路由,也可以提供一个自定义的 sink 分区器。‘fixed’ 分区器会将同一个 Flink 分区中的消息写入同一个 Kafka 分区,从而减少网络连接的开销。

2. Flink版本:=1.11

Kafka Producer 分区方案
配置选项sink.partitioner指定了从Flink的分区到Kafka的分区的输出分区。默认情况下,Kafka sink最多写入与其自身并行度相同的分区(每个sink的并行实例将写入到一个分区)。为了将写入分布到更多分区或控制将行路由到分区,可以提供自定义的sink分区器。循环分区器对于避免不平衡的分区很有用。然而,它将导致所有Flink实例和所有Kafka代理之间之间有大量的网络连接。

3. Flink版本:<=1.10

Kafka Producer 分区方案
默认情况下,如果没有为 Flink Kafka Producer 指定自定义分区程序,则 producer 将使用 FlinkFixedPartitioner 为每个 Flink Kafka Producer 并行子任务映射到单个 Kafka 分区(即,接收子任务接收到的所有消息都将位于同一个 Kafka 分区中)。
可以通过扩展 FlinkKafkaPartitioner 类来实现自定义分区程序。所有 Kafka 版本的构造函数都允许在实例化 producer 时提供自定义分区程序。 注意:分区器实现必须是可序列化的,因为它们将在 Flink 节点之间传输。此外,请记住分区器中的任何状态都将在作业失败时丢失,因为分区器不是 producer 的 checkpoint 状态的一部分。
也可以完全避免使用分区器,并简单地让 Kafka 通过其附加 key 写入的消息进行分区(使用提供的序列化 schema 为每条记录确定分区)。 为此,在实例化 producer 时提供 null 自定义分区程序,提供 null 作为自定义分区器是很重要的; 如上所述,如果未指定自定义分区程序,则默认使用 FlinkFixedPartitioner。

总结:根据Flink 官方文档提供的信息,可见Flink不同版本在处理写Kafka分区的默认配置是有区别的:

  1. Flink版本 >=1.12:

    • 默认情况下,Flink使用Kafka默认分区器来对消息进行分区。 也就是 kafka 的粘性分区策略
  2. Flink版本 <=1.11:

    • 默认情况下,Kafka sink最多写入与其自身并行度相同的分区,默认使用 FlinkFixedPartitioner。

*重点介绍一下粘性分区策略

粘性分区程序通过选取单个分区来发送所有非键化记录,解决了将没有键的记录分散到更小批处理中的问题。一旦该分区的批处理被填充或以其他方式完成,粘性分区程序就会随机选择并“粘附”到一个新分区。这样,在更长的时间段内,记录大约均匀地分布在所有分区之间,同时获得更大批处理大小的额外好处。
kafka粘性分区策略
为了更改粘性分区,Apache Kafka 2.4 还在分区器接口中添加了一个名为 onNewBatch 的新方法,以便在创建新批处理之前使用,这是更改粘性分区的最佳时机。DefaultPartitioner 实现此功能。

原文连接地址:Kafka Producer 使用粘性分区策略的改进

这篇关于Flink KafkaSink分区配置的不同版本对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/916843

相关文章

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

mysql5.7.15winx64配置全过程

《mysql5.7.15winx64配置全过程》文章详细介绍了MySQL5.7.15免安装版的配置步骤,包括解压安装包、设置环境变量、修改配置文件、初始化数据目录、安装服务、启动数据库、登录及密码修改... 目录前言一、首先下载安装包二、安android装步骤1.第一步解压文件2.配置环境变量3.复制my-

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Conda国内镜像源及配置过程

《Conda国内镜像源及配置过程》文章介绍Conda镜像源使用方法,涵盖临时指定单个/多个源、永久配置及恢复默认设置,同时说明main(官方稳定)、free(逐渐弃用)、conda-forge(社区更... 目录一、Conda国内镜像源二、Conda临时使用镜像源指定单个源临时指定多个源创建环境时临时指定源

MySQL配置多主复制的实现步骤

《MySQL配置多主复制的实现步骤》多主复制是一种允许多个MySQL服务器同时接受写操作的复制方式,本文就来介绍一下MySQL配置多主复制的实现步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 环境准备2. 配置每台服务器2.1 修改每台服务器的配置文件3. 安装和配置插件4. 启动组复制4.