【实战02】flinksql mysql真正的批量插入

问题由来

这个问题困扰两天了,一个很简单的flink任务,从kafka读出数据,然后开窗计算之后将结果存入mysql.
数据量级:每秒70万条数据,按理说数据量不断太大,但是sink端口一致产生被压问题。经过分析最后发现是往mysql的写入速率太慢,导致checkpoint 超时,甚至任务失败。 那么是怎么发现mysql的写入产生的背压呢? 因为我们之前有一个任务数据量是现在这个任务的100倍左右,但是从来没有出现过背压,理论上当前任务也不应该出现背压。 这两个任务的逻辑极其相似,唯一不同的大方在于之前写入的是kafka, 现在写入的是mysql. 那么就只可能是sink到mysql太慢导致的背压。
于是带着这个问题去官网找mysql sink的批量参数,看下图:
在这里插入图片描述
加上这两个参数之后,我以为就可以实现批量插入了,但是结果依旧产生背压,也就是说我配置的这两个参数没有真的起作用,那么问题出在哪里呢? 带着这个问题最后看到了一篇文章:https://blog.csdn.net/qq_34283987/article/details/107694587

结果代码

原来是jdbc协议中的参数rewriteBatchedStatements在作祟。 于是最后我的flinksql改成了下面的样子,问题得到解决。

/*
    目标表连接
*/
CREATE TABLE `dwd_pre_distinct_act_user01`
(
    `window_start`     timestamp(0),
    `window_end`       timestamp(0),
	`user_id` 		   BIGINT
) WITH (
      'connector' = 'jdbc',
      'url' = 'jdbc:mysql://am-k1a0pwc6lggw9c43770270.ap-southeast-5.ads.aliyuncs.com:3306/domino_dwd?rewriteBatchedStatements=true',
      'driver' = 'com.mysql.cj.jdbc.Driver',
      'username' = 'root',
      'password' = 'xxx',
      'table-name' = 'user_info_log',
      'sink.buffer-flush.max-rows' = '20000',
      'sink.buffer-flush.interval' = '3000'
);

/*
    源端表连接
*/
CREATE TABLE `app_login_log`
(
	`login_date` TIMESTAMP(3),
	`user_id` BIGINT,
    WATERMARK FOR login_date as login_date - INTERVAL '0.1' SECOND
) WITH (
      'connector' = 'kafka',
      'topic' = 'game_log',
      'properties.group.id' = 'group_01',
      'properties.bootstrap.servers' ='xxx:9092',
	  'scan.startup.mode' = 'latest-offset',
      'format' = 'json'
      );
	  
insert into dwd_pre_distinct_act_user01
(window_start, window_end, user_id)
select
	window_start,
	window_end,
	user_id
from table(
	tumble(table app_login_log, descriptor(login_date), interval '10' seconds))
group by window_start, window_end, user_id
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我先森

鼓励一个吧,哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值