flink kafka sink 默认分区器 FlinkFixedPartitioner 原理与注意

flink-FlinkFixedPartitioner分区原理 FlinkFixedPartitioner源码: package org.apache.flink.streaming.connectors.kafka.partitioner; import org.apache.flink.util.Preconditions; public class FlinkFixedPartitioner<T> extends FlinkKafka... 阅读详情

FlinkFixedPartitioner源码:

package org.apache.flink.streaming.connectors.kafka.partitioner;
 
import org.apache.flink.util.Preconditions;
 
public class FlinkFixedPartitioner<T> extends FlinkKafkaPartitioner<T> {
    private int parallelInstanceId;
 
    public FlinkFixedPartitioner() {
    }
 
    public void open(int parallelInstanceId, int parallelInstances) {
        Preconditions.checkArgument(parallelInstanceId >= 0, "Id of this subtask cannot be negative.");
        Preconditions.checkArgument(parallelInstances > 0, "Number of subtasks must be larger than 0.");
        this.parallelInstanceId = parallelInstanceId;
    }
 
    public int partition(T record, byte[] key, byte[] value, String targetTopic, int[] partitions) {
        Preconditions.checkArgument(partitions != null && partitions.length > 0, "Partitions of the target topic is empty.");
        return partitions[this.parallelInstanceId % partitions.length];
    }
}

根据源码可以看出:

flink是根据sink的subtask的id和kafka的partition数量进行取余计算的,计算过程如下:

flink并行度为3(F0,F1,F2),partition数量为2(P0,P1),则F0->P0,F1->P1,F2->P0

flink并行度为2(F0,F1),partition数量为3(P0,P1,P2),则F0->P0,F1->P1

因此默认分区器会有2个坑:

  • 当 Sink 的并发度低于 Topic 的 partition 个数时,一个 sink task 写一个 partition,会导致部分 partition 完全没有数据。

  • 当 topic 的 partition 扩容时,则需要重启作业,以便发现新的 partition。

Flink-SQL upset-Kafka自定义分区器 阅读详情

相关推荐

FlinkSQL sink 到 kafka 中的分区分配规则

场景 直接用 FlinkSQL 实现消费kafka中的数据,并经过一系列转换后sink到kafka另一个topic中。 INSERT INTO kafka_sink_table SELECT xxx FROM kafka_source_table Flink SQL的kafka connector里有一个参数sink.partitioner 1,如下: 固定:每个Flink分区结束在最多一个Kafka分区。 循环:一个Flink分区被分配到Kafka分区循环。 自定义FlinkKafkaPartiti

ChengYanan的博客 4036

Flink 消费 Kafka 分区顺序性问题

1. kafka分区数据顺序性 kafka具有分区内数据有序的特点,可以通过将数据指定到特定的分区来实现数据的顺序性。kafka分区逻辑代码如下:如果指定了分区号生产,则发送到指定分区;否则调用分区器计算方法partitioner.partition() private int partition(ProducerRecord<K, V> record, byte[] serializedKey, byte[] serializedValue, Cluster cluster) { In

qq_16164711的博客 4389

flinkSQL数据写kafka多分区

1、背景 FlinkSQL数据写kafka,如果不设置并行度,默认是1。 但是由于数据量和下游消费者的需求,需要往多个kafka分区写数据,提高并发,在这个情况下,需要保证同一个主键的数据发往同一个partition,flinkSQL已经支持这个功能,接下来我们实现一下 2、实现(python代码) 只需要两步: 1⃣️初始化:初始化加上flink并行的配置table_env.get_config().get_configuration().set_string(“parallelism.default”,

weixin_42868529的博客 2266

Flink kafka 数据汇不指定分区器导致的问题

kafka默认的分区器

lixia0417mul2的博客 841

flink写入kafka之自定义分区器

直入正题,flink写入kafka根据某个数据中的字段做分区发送到kafka的指定分区,如果你在sink中每次要手动写producer,那么你可以略过此文章 接着上篇文章flink写入kafka之默认序列化类和默认分区器 直接上代码 /*自定义分区*/ @SuppressWarnings("unchecked") FlinkKafkaProducer010<String> fl...

qq_24124009的博客 6238

【Flink实战系列】Flink SQL 写入 kafka 自定义分区策略(sink.partitioner)

Flink SQL 写入 kafka 自定义分区策略 当用 Flink SQL 写入 kafka 的时候如何指定分区策略呢?其实 Flink SQL 本身是提供有 sink.partitioner 参数的,详细可以查看官网 https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/connectors/table/kafka/#sink-partitioner sink.partitioner optional ‘default’

JasonLee实时计算 4285

【Kafka】flinkProducer kafka分区策略及kafka 默认分区策略

最近在学习 读写 , 突然想到如果 生产消息到,那么这条消息如何确定发往那个分区。顺便也回顾下 本身一个默认分区策略和生产策略这里整理并记录下。这里我们使用 来将数据写入到 Kafka,那么KafkaSink 是如何确定一条消息要发送到那个分区?默认的策略是什么?可以看到 只有 这一个默认的实现。相关的分区策略代码如下: 可以看出 是根据运行子任务的并行度进行分区数的取余写入的。计算公式如下。 2. null 当我们代码指定分区策略为 时,那么肯定就会选用Kafka 本身默认的分区策略。我

Mrerlou的博客 4156

【Flink】flink并行度与kafka分区(partition)设置

1.概述 默认: 【Flink】FlinkConsumer是如何保证一个partition对应一个thread的 当分区与并行度不一样呢? 2.原理 采用取模运算;平衡 kafka partition与并行度关系。 计算公式 kafkaPartition mod 并行度总数 = 分配到并行度中的partition 例子:partition 个数为 6;并行度为 3 图示如下: 如上分析,如果...

九师兄 1万+

【Flink读写外部系统】Flink自定义kafka分区并输出

Flink数据发送到kafka,并自定义Kafka分区; 注意这里是通过FlinkkafkaProducer将数据发送到kafka;跟下面的检查点是不一样的 FlinkkafkaProducer下的消费保障总共分为3级别 val kafkaSink = new FlinkKafkaProducer[ResultDt]("topicName", kafkaPro, FlinkKafkaProducer.Semantic.EXACTLY_ONCE)

大白 1331

【Flink】Flink kafka producer 分区策略 (flink写入数据不均匀 与 数据写入 分区无数据 )

思考这个问题,主要原因是,我们写了一个监控Kafka分区是否倾斜的程序,然后程序监控出来一个数据,写入倾斜的问题。如下图可以看到某个kafka的3个分区一直没有数据写入。然后我就去找看看FLink是如何写入的。可以看到我们的程序一般调用这个函数}这里可以看到默认是使用分区器。这个分区器的继承体系如下。...

九师兄 3162

RiscV运行zephyr和Linux的方法

riscv基金会搞了一个网站,用于介绍如何使用riscv指令集进行开发。 对于运行zephyr和linux以及Qemu有非常大的帮助。 可以作为riscv开发的相关参考。 RISC-V - Getting Started Guide — RISC-V - Getting Started Guidehttps://risc-v-getting-started-guide.readthedocs.io/en/latest/index.html RISC-V - Getting Started Gu.

闲人的专栏 736

Flink Sink KafkaFlink作为生产者中并行度同kafkapartition关系

本文主要针对Flink1.0中关于Flink Sink的并行度和KafkaPartition的关系,官网见: https://ci.apache.org/projects/flink/flink-docs-master/dev/connectors/kafka.html#kafka-producer-partitioning-scheme By default, if a custom pa...

赣江 2056

YooAsset 2.2.12四层加密架构:跨平台资源安全实战指南

AssetBundle加密是Unity热更新安全的核心环节,其本质是通过算法、密钥管理与生命周期协同实现资源全链路防护。传统方案常陷于‘打包后加密’的误区,导致内存开销大、跨平台兼容差、逆向防护弱。YooAsset 2.2.12提出打包层、传输层、加载层、运行层四层防护架构,将加密前置到资源序列化前,并依托BundleHeader实现动态算法协商与密钥分发,显著提升iOS/Android/WebGL三端一致性。该方案兼顾AES-128等通用算法与SM4等国密支持,同时通过IMemoryDecryptor实现

weixin_32428571的博客 414

Flink写入kafka时,只写入kafka的部分Partitioner,无法写所有的Partitioner问题

1. 写在前面 在利用flink实时计算的时候,往往会从kafka读取数据写入数据到kafka,但会发现当kafka多个Partitioner时,特别在P量级数据为了kafka的性能kafka的节点有十几个时,一个topic的Partitioner可能有几十个甚至更多,发现flink写入kafka的时候没有全部写Partitioner,而是写了部分的Partitioner,虽然这个问题不容易被发现...

weixin_30725467的博客 2574

EEG信号分析实战:从时域到频域,手把手教你用Python处理脑电数据

本文详细介绍了使用Python进行EEG信号分析的实战方法,涵盖时域分析、频域分析和时频分析三大核心技术。通过MNE-Python等工具,读者将学习如何从原始脑电数据中提取事件相关电位(ERP),解码脑波节律特征,并运用时频分析追踪动态神经活动。教程包含完整的代码示例和认知科学解释,适合神经科学研究者快速掌握EEG分析全流程。

pink的博客 1007

task5:在本地搭建大模型(ollama 和 LM studio 对比),接入 openclaw

关于大模型,大家千万不要想着在本地部署,根本不可行,没有那个财力。另外大模型迭代快,不可能每周都在下载大模型。再次,还是国外的模型好用,国内的模型真的在 deepresearch 上就有很大问题,你们懂的。所以本篇文章,还是聚焦在探索层面+实操,并不会实战。

这里是 AI 食用指南,持续分享有用的AI 实操和应用! 1968

FlinkKafkaProducer默认和自定义分区策略

我们经常关注的是Kafka消费者的消费策略,但是又会在某些特殊情况下要求自定义生产者的分区策略:如按序消费:将所有数据写入一个分区中。又或者默认的策略满足我们的业务需求。值得一提的是,FlinkKafkaProducer(这里版本13.0.2,更早期的版本如1.10.0中是带版本号的FlinkKafkaProducer10等),和Kafka(这里版本kafka_2.11 1.1.1)的api中的KafkaProducer写入分区策略并不相同。 即Flink写kafka使用的机制与原生接口的写入方式是有差别

长臂人猿的博客 3673

工业级4~20mA转0~3V信号调理电路原理图设计,已量产(电流传感器)

在工业现场,4~20mA 电流信号是模拟量传输的 “老熟人”—— 抗干扰强、能跑长距离,但嵌入式 MCU 的 ADC 一般只认电压信号。最近做项目时,我设计了一款能覆盖 0~25mA(含超量程冗余)、线性输出 0~3V 的调理电路,经过现场调试挺稳定,分享下细节。

不脱发的程序猿 525

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

总结:根据Flink 官方文档提供的信息,可见Flink不同版本在处理写Kafka分区的默认配置是有区别的: 1. Flink版本 >=1.12: - 默认情况下,Flink使用Kafka默认分区器来对消息进行分区。 也就是 kafka 的粘性分区策略 2. Flink版本

qq_36382892的博客 1631

vs code , 配置 claude code 插件, 默认选项 : --dangerously-skip-permission

摘要:本文介绍如何在VS Code中为Claude Code插件配置--dangerously-skip-permission参数,包含两种方法:图形界面设置(适合新手)和直接编辑settings.json(精准配置)。该参数会跳过权限检查,仅建议在本地测试环境中使用。配置后需通过命令面板验证参数是否生效,并注意安全风险,避免在生产环境使用。多参数配置时需用数组格式,不同版本插件可能键名略有差异。

AI天才研究院 4990

数美device_fingerprint、device_id、hmac生成

device_fingerprint、hmac、device_id参数分析与解读

吴秋霖的博客 2869

Flink1.14新版KafkaSource和KafkaSink实践使用(自定义反序列化器、Topic选择器、序列化器、分区器)

Flink1.14新版KafkaSource和KafkaSink实践使用(自定义反序列化器、Topic选择器、序列化器、分区器)

Hushhhh的博客 1万+

智能绿植管家:基于 ESP32 的室内植物自动补光与环境调控系统

本文设计的基于 ESP32 的室内植物自动补光与生长环境调控系统,实现了植物生长环境的自动化、智能化管理。硬件选型合理、接线简单,软件逻辑清晰、易于调试,能够有效解决室内植物生长环境不适的问题。系统具备良好的实用性和扩展性,可为园艺爱好者和小型培育场所提供稳定、高效的植物养护方案。

weixin_42300449的博客 145

flink写入到kafka,只写入指定分区问题排查

背景: flink的datastream部署到线上时,发现数据只能写入到kafka的一些分区,其他分区没有数据写入。当把flink的并行度设置大于等于kafka的分区数时,kafka的分区都能写入数据。于是研究了一下源码。 FlinkFixedPartitioner源码: package org.apache.flink.streaming.connectors.kafka.partitioner; import org.apache.flink.annotation.PublicEvolving

wppwpp1的专栏 3990

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

demo flink写入kafka_Flink读写Kafka

Flink读写Kafka在Flink中,我们分别用Source Connectors代表连接数据源的连接器,用Sink Connector代表连接数据输出的连接器。下面我们介绍一下Flink中用于读写kafka的source & sink connector。Apache Kafka Source ConnectorsApache Kafka 是一个分布式的流平台,其核心是一个分布式的发布...

weixin_28711397的博客 884

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

11、Flink连接器

Flink本身提供了很多访问其他数据源的连接器,使得访问其他第三方数据源变得简单高效。此外,用户也可按需自行扩展Source和Sink来对接各种数据系统。

江7城子的专栏 630

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: flink checkpoint 配置
下一篇: Flink checkpoint 状态存储策略state backends详解
join_null
博客等级 码龄11年 25粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值