接着 https://blog.51cto.com/mapengfei/2554700 输出到kafka和文件,这2种都是只支持追加模式,那要实现 撤回模式(Retract)和更新插入模式(upsert),大部分场景是在操作数据库中,像mysql,es,mongo等,这里实现下输入到mysql和es
再贴一下集中模式的区别:
追加模式(Append)--文件系统只支持追加模式
表只做插入操作,和外部连接器只交换插入(insert)消息
撤回模式(Retract)--先删除再插入,实现更新操作
表和外部连接器交换添加(Add)和撤回(Retract)消息
插入操作(insert)编码为add消息;删除(delete)编码为retract消息;更新(update)编码为上一条的retract和下一条的add消息
更新插入模式(upsert)
更新和插入都被编码为upsert消息;删除编码为delete消息
输出到mysql
启动一个mysql服务器,新建数据库test_mafei,里面建一张表用来存储输出数据
DROP TABLE IF EXISTS `sensor_count`;
CREATE TABLE `sensor_count` (
`id` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL,
`counts` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
SET FOREIGN_KEY_CHECKS = 1;
2 上代码(关于环境准备可以参考之前的文章)
package com.mafei.apitest.tabletest
import org.apache.flink.streaming.api.scala._
import org.apache.flink.table.api.DataTypes
import org.apache.flink.table.api.scala._
import org.apache.flink.table.descriptors.{Csv, Elasticsearch, FileSystem, Json, Schema}
object MysqlOutputTest {
def main(args: Array[String]): Unit = {
//1 、创建环境
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setParallelism(1)
val tableEnv = StreamTabl