flink-kafka-mysql【flink消费kafka外部存储kafka偏移量,并满足事务机制】

本文介绍如何使用Flink处理Kafka消息,并通过事务机制确保数据在MySQL中的准确性和一致性,包括从Kafka消费数据、外部管理偏移量以及自定义MySQL Sink实现。

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

flink-kafka-mysql【事务,外部管理偏移量】

有时候,因为业务的需要,我们需要保证端到端的语义一致性。那么,如果我们将kafka的偏移量外存,再辅以事务机制,即可做到端到端的语义一致性。(当然,如果可能的话,我们只需要保证min等性,也不需要这么麻烦。)

话不多说,直接上案例。

首先,需要建立一张student表,以及kafka偏移量的表。

CREATE TABLE `kafka` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `topic` varchar(11) DEFAULT NULL,
  `partition` int(11) DEFAULT NULL,
  `offset` bigint(20) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UK_topic_partition_date` (`topic`,`partition`)
) ENGINE=InnoDB AUTO_INCREMENT=263 DEFAULT CHARSET=utf8mb4;


CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `name` varchar(100) NOT NULL,
  `pass` varchar(40) NOT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

其次,我们往kafka发送数据

package com.nuc.transaction;

import com.alibaba.fastjson.JSON;
import com.nuc.test.Student;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.util.Properties;

/**
 *
 * 往kafka写入数据
 *
 */
public class TestKafkaProducer {
   

    public static final String broker_list = "172.16.10.102:9092,172.16.10.103:9092,172.16.10.104:9092";
    public static final String topic = "test1";  

    public static void main(String[] args) throws InterruptedException {
   

            Properties props = new Properties();
            props.put("bootstrap.servers", broker_list);
            props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
            props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
            KafkaProducer producer = new KafkaProducer<String, String>(props);

            for (int i = 1; i <= 10000; i++) {
   
                Student student = new Student(i, "yrx" + i, "password" + i, 18 + i)
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值