flink二阶提交(没有搞完)

举例说明

甲乙丙丁四人要组织一个会议,需要确定会议时间,不妨设甲是协调者,乙丙丁是参与者。

投票阶段:

(1)甲发邮件给乙丙丁,周二十点开会是否有时间;

(2)甲回复有时间;

(3)乙回复有时间;

(4)丙迟迟不回复,此时对于这个活动,甲乙丙均处于阻塞状态,算法无法继续进行;

(5)丙回复有时间(或者没有时间);

提交阶段:

(1)协调者甲将收集到的结果反馈给乙丙丁(什么时候反馈,以及反馈结果如何,在此例中取决与丙的时间与决定);

(2)乙收到;

(3)丙收到;

(4)丁收到;

 

 

来源

代码以[4]为主,我自己修正了一些bug,增加了依赖。

集群准备工作

启动Zookeeper集群、Kafka集群、Flink集群。

流程图

 

 

 

Mysql准备工作

create database test;

use test;

CREATE TABLE `mysqlExactlyOnce_test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `value` varchar(255) DEFAULT NULL,
  `insert_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

文件说明与联系

文件说明需要设定的参数
DBConnectUtil.javajava连接数据库
KafkaUtils.java(生产者,顶层文件)生产者broker_list
MysqlExactlyOncePOJO.java一个pojo对象
MySqlTwoPhaseCommitSink.java(被调用)插入数据,制造异常jdbc:mysql://以及sql语句
streamdemokafka2mysql.java(调用MySqlTwoPhaseCommitSink,顶层架构)Flink source与sink

BOOTSTRAP_SERVERS_CONFIG

运行步骤

①运行StreamDemoKafka2Mysql.java
②运行KafkaUtils.java

 

调试用命令

$KAFKA/bin/kafka-topics.sh --list  --zookeeper  Desktop:2181

$KAFKA/bin/kafka-console-consumer.sh  --bootstrap-server Desktop:9091 --from-beginning --topic mysql-exactly-Once-4

修改的主题的话,需要同时在kafkautils.java和StreamDemoKafka2Mysql.java中修改

实验效果

 

 

 

tijiao最终代码如下

 

Reference:

[1]Flink两阶段提交

[2]Flink 之 MySQL二阶提交

[3]解决Flink消费Kafka信息,结果存储在Mysql的重复消费问题

[4]Flink实现Kafka到Mysql的Exactly-Once

[5]Kafka常用命令

[6]一分钟了解两阶段提交2PC(运营MM也懂了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值