为什么Flink无法实时写入MySQL

  介绍

这篇文章主要介绍”为什么Flink无法实时写入MySQL”,在日常操作中,相信很多人在为什么Flink无法实时写入MySQL问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“为什么Flink无法实时写入MySQL”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

<节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <强>本文主要分为以下三部分:,,,,,,,,,,, <>部分,,,,,,,,,,, <李>

问题描述

<李>

解决思路

<李>

原因剖析,,,,,,,,,,,,,,

<节> <节> <节>

<强>问题描述

<节>, <节> Flink 1.10使用flink-jdbc连接器的方式与MySQL交互,读数据和写数据都能完成,但是在写数据时,发现Flink程序执行完毕之后,才能在MySQL中查询到插入的数据,即,虽然是流计算,但却不能实时的输出计算结果?
为什么Flink无法实时写入MySQL”>
  ,<节> <br/>
  ,</节> <>节相关代码片段:
  ,</节> <节> <br/>
  ,</节> <节> <>以前JDBCAppendTableSink.builder (),,,, .setDrivername (“com.mysql.jdbc.Driver"),,,, .setDBUrl (“jdbc: mysql://localhost/flink   , <节>
  , <节> <节> <节>

<>强如何解决?

<节> Flink 1.10这个问题是知道一秒钟,不知磨洋工的情况下,在初学时候非常容易遇上,那么真的是Flink不能实时写入MySQL吗?当然不是,上面代码基础之上简单的加上一行,就解决问题了:
   <节>
   <节>
 .... setBatchSize(1),//将写入MySQL的缓冲大小为1…
   <节> <节> <节>

<强>原因剖析

<节>那么问题虽然解决了,根本原因是个啥呢?也许你看到这里会说,这问题很明显,就是Flink设计JDBC水槽的时候出于性能因素考虑,对写入缓冲做了默认值设置。 <节>
   <>节没错,这一点你说的很对,在Flink 1.10中JDBC OutputFormat的基类,AbstractJDBCOutputFormat里面和这相关的变量DEFAULT_FLUSH_MAX_SIZE默认值是5000,所以在你学习测试时候由于测试数据少(少于5000年),数据一直在缓冲区中,直到数据源数据结束,作业也结束了,才将计算结果刷入MySQL,所以没有实时的(每条)写入MySQL。如下: <节>
   <节> 为什么Flink无法实时写入MySQL”>
  </节> <节> <br/>
  </节> <节>但这里还有个因素需要注意,那就是时间因素,上面DEFAULT_FLUSH_INTERVAL_MILLS默认值是0,这个相当于没有时间限制,一直等到缓冲区满了或者作业结束才能触发写出动作。</节> <节> <br/>
  </节> <>节也就是有些初学者,发现问题,即使故意调试时候打上断点,不让作业结束,但是等到花儿都谢了,数据也没有写入到MySQL。</节> <节> <br/>
  </节> <节>在Flink 1.10中AbstractJDBCOutputFormat有两个实现类:</节> <节> <br/>
  </节> <节> <img src=到此,关于“为什么Flink无法实时写入MySQL”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

为什么Flink无法实时写入MySQL