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 使用粘性分区策略的改进

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Yoshua Bengio独家专访:我不想把大模型未来押注在Scaling Law上,AGI路上要“注意安全”...

导读 漫长的30年间&#xff0c;数度从主流方向的超然出走&#xff0c;是Bengio的制胜秘诀。这种不盲从主流的风格体现在他研究生涯的方方面面。 90年代末期&#xff0c;神经网络被打入冷宫&#xff0c;Bengio的论文多次遭拒&#xff0c;连学生们也开始担心&#xff0c;和他一起…

【ESP32 手机配网教程】

【ESP32 手机配网教程】 1. 前言2. 先决条件2.1 环境配置2.2 所需零件3.3 硬件连接步骤 3. Web热点手动配网3.1. 准备工作3.2. 编译上传程序3.3. 进行手动配网 4. BLE无线配网4.1. 准备工作**4.2. 编译上传程序4.3. 使用手机APP进行无线配网 5. 总结 1. 前言 欢迎使用ESP32进行…

python将xml格式文件转成png或者pdf格式

本文主要介绍运行NCCL代码时输出的xml文件该如何转成更加容易观看的图格式 如下是举例&#xff0c;服务器上的PCIE相关的topo xml 文件 <system version"1"><cpu numaid"1" affinity"ffffff00,0000ffff,ff000000" arch"x86_64&q…

Next.js多页布局getLayout使用方法

目录 官网解释 直接上代码使用方法展示 1.page页面​编辑 2._app.js页面,也放在pages中​编辑 效果展示 有getLayout展示getLayout返回的页面布局 无getLayout展示默认布局 官网解释 如果需要多个布局&#xff0c;可以添加一个属性getLayout添加到您的页面&#xff0c;允…

判断任意输入年份是闰年还是普通闰年还是平年

判断任意输入年份是闰年还是普通闰年还是平年 判断输入年份是否为世纪闰年&#xff08;能被100整除但不能被400整除&#xff09;或普通闰年&#xff08;能被4整除但不能被100整除&#xff0c;或者能被400整除&#xff09;。用户输入一个年份后&#xff0c;程序会判断该年份是世…

第五届上海市青少年算法竞赛 T4 夹心饼干(思维、数学)

第四题&#xff1a;T4夹心饼干 标签&#xff1a;思维、数学题意&#xff1a;给定一个数列 a 1 , a 2 , a 3 . . . , a n a_1,a_2,a_3...,a_n a1​,a2​,a3​...,an​&#xff0c;请求出在这个序列中&#xff0c;能挑出多少个三个数 a i , a j , a k a_i,a_j,a_k ai​,aj​,ak​…

Python数据可视化和处理常用库(如Matplotlib、Seaborn)

Python是一种功能强大的编程语言&#xff0c;拥有许多用于数据可视化和处理的常用库。其中&#xff0c;Matplotlib和Seaborn是两个非常受欢迎的库&#xff0c;它们提供了丰富的功能和灵活的绘图选项。下面是一些关于这两个库的博文&#xff0c;可以帮助你更好地了解它们的使用方…

深入理解单实例设计模式:构建高效且可靠的应用

在软件工程领域&#xff0c;单实例&#xff08;Singleton&#xff09;设计模式是一种确保类只有一个实例并提供一个全局访问点的设计模式。这个概念在需要控制访问共享资源或者在整个应用中维护一致状态的场景下特别有用。本文将详细探讨单实例模式的实现、应用及其优缺点。 目…

2024华中杯数学建模挑战赛选题建议及各题思路来啦!

大家好呀&#xff0c;华中杯数学建模开始了&#xff0c;来说一下初步的选题建议吧&#xff1a; 首先定下主基调&#xff0c; 本次华中杯推荐选择C题目。难度方面A&#xff1e;B&#xff1e;C&#xff0c;A是优化类题目&#xff0c;难度较高&#xff0c;建议参考23国赛A优秀论…

【方案探讨】 出现java.io.IOException解决方法

出现java.io.IOException解决方法 解决问题的博客&#xff1a;探索新思路&#xff0c;共同成长 &#x1f331;壹、出现背景贰、排查方向叁、场景复现1、放单个大文件2、修改后端请求其他服务器时间3、多次请求多个文件4、单词请求多个文件 肆、解决方案谢谢您的阅读和支持&…

深入探索:Facebook如何重塑社交互动

在当代社会中&#xff0c;社交互动已成为日常生活的核心组成部分。而在众多的社交媒体平台中&#xff0c;Facebook凭借其卓越的用户基础和创新的功能&#xff0c;已经成为了全球最大的社交媒体平台。本文将深入探讨Facebook如何通过其独特的特性和功能&#xff0c;重塑了人们的…

Elasticsearch:使用向量化和 FFI/madvise 加速 Lucene

作者&#xff1a;来自 Elastic Chris Hegarty 在 Lucene 领域&#xff0c;我们一直热切地采用新版本 Java 的功能。这些功能使 Lucene 更接近 JVM 和底层硬件&#xff0c;从而提高了性能和稳定性。这使得 Lucene 保持现代化和具有竞争力。 Lucene 的下一个主要版本&#xff0…

Springboot+Vue线上教学平台赠送配套文档1w字

SpringbootVue线上教学平台赠送配套文档1w字 项目描述 线上教学平台是一个功能丰富的在线教育工具&#xff0c;它为学生、教师和管理员提供了一个集成的学习、交流和管理环境。以下是关于该平台各项功能的简要介绍&#xff1a; 前台门户&#xff1a;前台门户是平台的门面&#…

实战|哈尔滨等保2.0 Linux主机测评过程之身份鉴别

一、身份鉴别 a)应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换。 输入 more /etc/shadow,得知系统所有用户&#xff0c;此语句字段格式有九段。 第一字段&#xff1a;用户名&#xff08;也被称为登录名…

jmeter-while控制器用法

condition中添加while结束循环的条件&#xff0c;以下语句的意思是&#xff0c;当percent等于100时&#xff0c;就跳出while循环继续执行 ${__javaScript("${percent}" ! 100)} 举例&#xff0c;以下方法是getPercent为一个引出的异步接口&#xff0c;该接口的返回包…

java如何实现rabbitmq的消息确认机制和消息持久化机制配置和示例

在Java中&#xff0c;使用RabbitMQ的客户端库&#xff08;通常是AMQP客户端库&#xff0c;如RabbitMQ的Java客户端&#xff09;可以方便地实现消息确认机制和消息持久化机制。以下是如何实现这两个机制的示例。 1、消息确认机制 RabbitMQ支持两种类型的确认&#xff1a;生产者…

Python编程小例子—石头、剪子、布游戏

random库的应用—石头、剪子、布游戏 Random标准库的用法 在Python中&#xff0c;random是一个标准库&#xff0c;提供了生成随机数的功能。以下是一些常见用法&#xff1a; 生成随机整数: import random# 生成指定范围内的随机整数 random_int random.randint(1, 100)生成…

HiveSql中的函数家族(二)

一、窗口函数 1、什么是窗口函数 在 SQL 中&#xff0c;窗口函数&#xff08;Window Functions&#xff09;是一种特殊的函数&#xff0c;它允许在查询结果集的特定窗口&#xff08;通常是一组行&#xff09;上执行聚合、分析和计算操作&#xff0c;而无需聚合整个结果集。窗口…

FTP客户端Transmit 5 for Mac中文激活版

Transmit 5是一款功能强大的Mac FTP客户端软件&#xff0c;它由Panic公司开发&#xff0c;为用户提供简单、高效的文件传输体验。 Transmit 5 for Mac中文激活版下载 Transmit 5支持多种传输协议&#xff0c;如FTP、SFTP、WebDAV和Amazon S3等&#xff0c;满足用户不同的文件传…

【公司UI自动化学习】

公司课程链接&#xff1a;https://l.jd.com/student/project/project.du?project_id697509403 公司的课程&#xff0c;是给一个学习方向。 一、 PC自动化 1&#xff09;什么项目适合 2&#xff09;PC自动化介入时间点 3&#xff09;自动化率&#xff1a; 频繁改动的&…