Flink CDC写入数据到kafka几种格式

本文详细介绍了Flink CDC将数据写入Kafka时的三种常见格式:upsert-kafka的正常JSON格式、debezium-json格式以及changelog-json格式,探讨了各自的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flink cdc写入kafka数据格式

主要记录flink cdc写入kafka几种常见的数据格式,其中包括upsert-kafka写入后正常的json格式,debezium-json格式以及changelog-json格式。

upsert-kafka 正常json数据格式

-- insert 操作:
{
   
   "name":"魏夜游","remark":"12","pid":"12","eno":"12"}
-- update 操作:
{
   
   "name":"魏夜游update","remark":"12","pid":"12","eno":"12"}
-- delete 操作: kafka 中没有数据

debezium-json 数据格式

-- insert 操作
{
   
   "before":null,"after":{
   
   "id"
首先,要使用Flink CDC数据同步到Kafka中,需要在Flink任务中引入Flink CDC库。然后,可以通过以下步骤实现数据同步: 1. 配置Flink CDC连接到源数据库:需要指定数据库类型、主机、端口、数据库名称、用户名和密码等信息。 2. 配置Flink CDC连接到目标Kafka:需要指定Kafka的地址和端口。 3. 定义数据源并创建CDC Source:使用Flink CDC提供的JDBC Source Function从源数据库中读取数据。 4. 定义数据的序列化和反序列化方法:Flink CDC会自动将从源数据库中读取的数据序列化成JSON格式,需要将其反序列化成Java对象。 5. 将数据写入Kafka:使用Flink Kafka Producer将数据写入Kafka中。 下面是一个实现Flink CDC数据同步到Kafka中的示例代码: ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 配置Flink CDC连接到源数据库 JdbcConnectionOptions connectionOptions = JdbcConnectionOptions .builder() .withDriverName("org.postgresql.Driver") .withUrl("jdbc:postgresql://localhost:5432/mydb") .withUsername("user") .withPassword("password") .build(); // 配置Flink CDC连接到目标Kafka Properties kafkaProperties = new Properties(); kafkaProperties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); // 定义数据源并创建CDC Source CDCSource<RowData> source = CDCSource .<RowData>builder() .jdbcConnectionOptions(connectionOptions) .tableList("mytable") .deserializer(new RowDataDebeziumDeserializeSchema()) .build(); // 定义数据的序列化和反序列化方法 SerializationSchema<MyObject> serializationSchema = new MyObjectSerializationSchema(); DeserializationSchema<MyObject> deserializationSchema = new MyObjectDeserializationSchema(); // 将数据写入Kafka FlinkKafkaProducer<MyObject> kafkaProducer = new FlinkKafkaProducer<>( "my-topic", serializationSchema, kafkaProperties, FlinkKafkaProducer.Semantic.EXACTLY_ONCE); DataStream<MyObject> stream = env .addSource(source) .map(new MyObjectMapFunction()) .returns(MyObject.class); stream .addSink(kafkaProducer); env.execute("Flink CDC to Kafka"); ``` 在上面的示例代码中,`MyObject`代表从源数据库中读取的数据,`RowDataDebeziumDeserializeSchema`代表将从Flink CDC读取的数据反序列化成`RowData`对象,`MyObjectSerializationSchema`代表将`MyObject`对象序列化成JSON格式,`MyObjectDeserializationSchema`代表将JSON格式数据反序列化成`MyObject`对象,`MyObjectMapFunction`代表将`RowData`对象转换成`MyObject`对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值