Flink 如何读取和写入 Clickhouse?

本文将主要介绍 Flink 读取和写入 Clickhouse 的过程及相关参数,核心内容将围绕以下3个问题:

  1. Flink读写Clickhouse支持哪个版本?

  2. ClickHouse读写Clickhouse有哪些参数?

  3. ClickHouse读写Clickhouse参数都有哪些说明?

ClickHouse 读取

一、插件名称

名称:clickhousereader

二、支持的数据源版本

ClickHouse 19.x及以上

三、参数说明

「jdbcUrl」

  • 描述:针对关系型数据库的jdbc连接字符串

  • jdbcUrl参考文档:clickhouse-jdbc官方文档

  • 必选:是

  • 默认值:无

「username」

  • 描述:数据源的用户名

  • 必选:是

  • 默认值:无

「password」

  • 描述:数据源指定用户名的密码

  • 必选:是

  • 默认值:无

「where」

  • 描述:筛选条件,reader插件根据指定的column、table、where条件拼接SQL,并根据这个SQL进行数据抽取。在实际业务场景中,往往会选择当天的数据进行同步,可以将where条件指定为gmt_create > time。

  • 注意:不可以将where条件指定为limit 10,limit不是SQL的合法where子句。

  • 必选:否

  • 默认值:无

「splitPk」

  • 描述:当speed配置中的channel大于1时指定此参数,Reader插件根据并发数和此参数指定的字段拼接sql,使每个并发读取不同的数据,提升读取速率。注意:推荐splitPk使用表主键,因为表主键通常情况下比较均匀,因此切分出来的分片也不容易出现数据热点。目前splitPk仅支持整形数据切分,不支持浮点、字符串、日期等其他类型。如果用户指定其他非支持类型,FlinkX将报错!如果channel大于1但是没有配置此参数,任务将置为失败。

  • 必选:否

  • 默认值:无

「fetchSize」

  • 描述:读取时每批次读取的数据条数。

  • 注意:此参数的值不可设置过大,否则会读取超时,导致任务失败。

  • 必选:否

  • 默认值:1000

「queryTimeOut」

  • 描述:查询超时时间,单位秒。

  • 注意:当数据量很大,或者从视图查询,或者自定义sql查询时,可通过此参数指定超时时间。

  • 必选:否

  • 默认值:1000

「customSql」

  • 描述:自定义的查询语句,如果只指定字段不能满足需求时,可通过此参数指定查询的sql,可以是任意复杂的查询语句。注意:只能是查询语句,否则会导致任务失败;查询语句返回的字段需要和column列表里的字段严格对应;当指定了此参数时,connection里指定的table无效;当指定此参数时,column必须指定具体字段信息,不能以*号代替;

  • 必选:否

  • 默认值:无

「column」

  • 描述:需要读取的字段。

  • 格式:支持3种格式

1.读取全部字段,如果字段数量很多,可以使用下面的写法:

"column":["*"]

2.只指定字段名称:

"column":["id","name"]

3.指定具体信息:

"column": [{    "name": "col",    "type": "datetime",    "format": "yyyy-MM-dd hh:mm:ss",    "value": "value"}]

属性说明:

  1. name:字段名称

  2. type:字段类型,可以和数据库里的字段类型不一样,程序会做一次类型转换

  3. format:如果字段是时间字符串,可以指定时间的格式,将字段类型转为日期格式返回

  4. value:如果数据库里不存在指定的字段,则会报错。如果指定的字段存在,当指定字段的值为null时,会以此value值作为默认值返回

  • 必选:是

  • 默认值:无

「polling」

  • 描述:是否开启间隔轮询,开启后会根据pollingInterval轮询间隔时间周期性的从数据库拉取数据。开启间隔轮询还需配置参数pollingInterval,increColumn,可以选择配置参数startLocation。若不配置参数startLocation,任务启动时将会从数据库中查询增量字段最大值作为轮询的开始位置。

  • 必选:否

  • 默认值:false

「pollingInterval」

  • 描述:轮询间隔时间,从数据库中拉取数据的间隔时间,默认为5000毫秒。

  • 必选:否

  • 默认值:5000

「requestAccumulatorInterval」

  • 描述:发送查询累加器请求的间隔时间。

  • 必选:否

  • 默认值:2


配置示例

1、基础配置





{
  "job": {
    "content": [{
      "reader": {
        "parameter" : {
          "column" : [ {
            "name" : "id",
            "type" : "bigint",
            "key" : "id"
          }, {
            "name" : "user_id",
            "type" : "bigint",
            "key" : "user_id"
          }, {
            "name" : "name",
            "type" : "varchar",
            "key" : "name"
          } ],
          "username" : "username",
          "password" : "password",
          "connection" : [ {
            "jdbcUrl" : [ "jdbc:clickhouse://0.0.0.1:8123/dtstack" ],
            "table" : [ "tableTest" ]
          } ],
          "where": "id > 1",
          "splitPk": "id",
          "fetchSize": 1000,
          "queryTimeOut": 1000,
          "customSql": "",
          "requestAccumulatorInterval": 2
        },
        "name" : "clickhousereader"
      },
      "writer": {
        "name": "streamwriter",
        "parameter": {
          "print": true
        }
      }
    }],
    "setting": {
      "speed": {
        "channel": 1,
        "bytes": 0
      },
      "errorLimit": {
        "record": 100
      }
    }
  }
}

2、多通道

{  "job": {    "content": [{      "reader": {        "parameter" : {          "column" : [ {            "name" : "id",            "type" : "bigint",            "key" : "id"          }, {            "name" : "user_id",            "type" : "bigint",            "key" : "user_id"          }, {            "name" : "name",            "type" : "varchar",            "key" : "name"          } ],          "username" : "username",          "password" : "password",          "connection" : [ {            "jdbcUrl" : [ "jdbc:clickhouse://0.0.0.1:8123/dtstack" ],            "table" : [ "tableTest" ]          } ],          "where": "id > 1",          "splitPk": "id",          "fetchSize": 1000,          "queryTimeOut": 1000,          "customSql": "",          "requestAccumulatorInterval": 2        },        "name" : "clickhousereader"      },      "writer": {        "name": "streamwriter",        "parameter": {          "print": true        }      }    }],    "setting": {      "speed": {        "channel": 3,        "bytes": 0      },      "errorLimit": {        "record": 100      }    }  }}

3、指定customSql

{  "job": {    "content": [{      "reader": {        "parameter" : {          "column" : [ {            "name" : "id",            "type" : "bigint",            "key" : "id"          }, {            "name" : "user_id",            "type" : "bigint",            "key" : "user_id"          }, {            "name" : "name",            "type" : "varchar",            "key" : "name"          } ],          "username" : "username",          "password" : "password",          "connection" : [ {            "jdbcUrl" : [ "jdbc:clickhouse://0.0.0.1:8123/dtstack" ],            "table" : [ "tableTest" ]          } ],          "where": "id > 1",          "splitPk": "id",          "fetchSize": 1000,          "queryTimeOut": 1000,          "customSql": "select id from tableTest",          "requestAccumulatorInterval": 2        },        "name" : "clickhousereader"      },      "writer": {        "name": "streamwriter",        "parameter": {          "print": true        }      }    }],    "setting": {      "speed": {        "channel": 1,        "bytes": 0      },      "errorLimit": {        "record": 100      }    }  }}

4、增量同步指定startLocation

{  "job": {    "content": [{      "reader": {        "parameter" : {          "column" : [ {            "name" : "id",            "type" : "bigint",            "key" : "id"          }, {            "name" : "user_id",            "type" : "bigint",            "key" : "user_id"          }, {            "name" : "name",            "type" : "varchar",            "key" : "name"          } ],          "username" : "username",          "password" : "password",          "connection" : [ {            "jdbcUrl" : [ "jdbc:clickhouse://0.0.0.1:8123/dtstack" ],            "table" : [ "tableTest" ]          } ],          "where": "id > 1",          "splitPk": "id",          "fetchSize": 1000,          "queryTimeOut": 1000,          "customSql": "",          "increColumn": "id",          "startLocation": "20",          "requestAccumulatorInterval": 2        },        "name" : "clickhousereader"      },      "writer": {        "name": "streamwriter",        "parameter": {          "print": true        }      }    }],    "setting": {      "speed": {        "channel": 1,        "bytes": 0      },      "errorLimit": {        "record": 100      }    }  }}

5、间隔轮询

{  "job": {    "content": [{      "reader": {        "parameter" : {          "column" : [ {            "name" : "id",            "type" : "bigint",            "key" : "id"          }, {            "name" : "user_id",            "type" : "bigint",            "key" : "user_id"          }, {            "name" : "name",            "type" : "varchar",            "key" : "name"          } ],          "username" : "username",          "password" : "password",          "connection" : [ {            "jdbcUrl" : [ "jdbc:clickhouse://0.0.0.1:8123/dtstack" ],            "table" : [ "tableTest" ]          } ],          "where": "id > 1",          "splitPk": "id",          "fetchSize": 1000,          "queryTimeOut": 1000,          "customSql": "",          "requestAccumulatorInterval": 2,          "polling": true,          "pollingInterval": 3000        },        "name" : "clickhousereader"      },      "writer": {        "name": "streamwriter",        "parameter": {          "print": true        }      }    }],    "setting": {      "speed": {        "channel": 1,        "bytes": 0      },      "errorLimit": {        "record": 100      }    }  }}

ClickHouse 写入

一、插件名称

名称:clickhousewriter

二、支持的数据源版本

ClickHouse 19.x及以上

三、参数说明

「jdbcUrl」

  • 描述:针对关系型数据库的jdbc连接字符串

  • 必选:是

  • 默认值:无

「username」

  • 描述:数据源的用户名

  • 必选:是

  • 默认值:无

「password」

  • 描述:数据源指定用户名的密码

  • 必选:是

  • 默认值:无

「column」

  • 描述:目的表需要写入数据的字段,字段之间用英文逗号分隔。例如: "column": ["id","name","age"]。

  • 必选:是

  • 默认值:否

  • 默认值:无

「preSql」

  • 描述:写入数据到目的表前,会先执行这里的一组标准语句

  • 必选:否

  • 默认值:无

「postSql」

  • 描述:写入数据到目的表后,会执行这里的一组标准语句

  • 必选:否

  • 默认值:无

「table」

  • 描述:目的表的表名称。目前只支持配置单个表,后续会支持多表

  • 必选:是

  • 默认值:无

「writeMode」

  • 描述:控制写入数据到目标表采用 insert into 语句,只支持insert操作

  • 必选:是

  • 所有选项:insert

  • 默认值:insert

「batchSize」

  • 描述:一次性批量提交的记录数大小,该值可以极大减少FlinkX与数据库的网络交互次数,并提升整体吞吐量。但是该值设置过大可能会造成FlinkX运行进程OOM情况

  • 必选:否

  • 默认值:1024

本文转载自「zhisheng」公众号,文章来源如下,感兴趣的同学可查看原文:

https://www.aboutyun.com/forum.php?mod=viewthread&tid=29271


  福利来了  

Apache Flink 极客挑战赛

万众瞩目的第二届 Apache Flink 极客挑战赛来啦!本次大赛全面升级,重量级助阵嘉宾专业指导,强大的资源配置供你发挥创意,还有 30w 丰厚奖金等你带走~聚焦  Flink 与 AI 技术的应用实践,挑战疫情防控的世界级难题,你准备好了么?

(点击图片可了解更多大赛信息)

戳我报名!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用网络文章开启本课程的开篇: 在大数据分析领域中,传统的大数据分析需要不同框架和技术组合才能达到最终的效果,在人力成本,技术能力和硬件成本上以及维护成本让大数据分析变得成为昂贵的事情。让很多中小型企业非常苦恼,不得不被迫租赁第三方大型公司的数据分析服务。  ClickHouse开源的出现让许多想做大数据并且想做大数据分析的很多公司和企业耳目一新。ClickHouse 正是以不依赖Hadoop 生态、安装和维护简单、查询速度快、可以支持SQL等特点在大数据分析领域越走越远。  本课程采用全新的大数据技术栈:Flink+ClickHouse,让你体验到全新技术栈的强大,感受时代变化的气息,通过学习完本课程可以节省你摸索的时间,节省企业成本,提高企业开发效率。本课程不仅告诉你如何做项目,还会告诉你如何验证系统如何支撑亿级并发,如何部署项目等等。希望本课程对一些企业开发人员和对新技术栈有兴趣的伙伴有所帮助,如对我录制的教程内容有建议请及时交流。 课程概述:在这个数据爆发的时代,像大型电商的数据量达到百亿级别,我们往往无法对海量的明细数据做进一步层次的预聚合,大量的业务数据都是好几亿数据关联,并且我们需要聚合结果能在秒级返回。  那么我们该如何实现这一需求呢?基于Flink+ClickHouse构建电商亿级实时数据分析平台课程,将带领大家一步一步从无到有实现一个高性能的实时数据分析平台,该系统以热门的互联网电商实际业务应用场景为案例讲解,对电商数据的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:概况统计、全站流量分析、渠道分析、广告分析、订单分析、运营分析(团购、秒杀、指定活动)等,该系统指标分为分钟级和小时级多时间方位分析,能承载海量数据的实时分析,数据分析涵盖全端(PC、移动、小程序)应用。 本课程凝聚讲师多年一线大数据企业实际项目经验,大数据企业在职架构师亲自授课,全程实操代码,带你体验真实的大数据开发过程,代码现场调试。通过本课程的学习再加上老师的答疑,你完全可以将本案例直接应用于企业。 本套课程可以满足世面上绝大多数大数据企业级的海量数据实时分析需求,全部代码在老师的指导下可以直接部署企业,支撑千亿级并发数据分析。项目代码也是具有极高的商业价值的,大家可以根据自己的业务进行修改,便可以使用。  本课程包含的技术: 开发工具为:IDEA、WebStorm Flink1.9.0 ClickHouseHadoop2.6.0 Hbase1.0.0 Kafka2.1.0 Hive1.0.0 Jmeter(验证如何支撑亿级并发)Docker (虚拟化部署)HDFS、MapReduce Zookeeper SpringBoot2.0.2.RELEASE SpringCloud Finchley.RELEASE Binlog、Canal MySQL Vue.js、Nodejs Highcharts Linux Shell编程  课程亮点: 1.与企业对接、真实工业界产品 2.ClickHouse高性能列式存储数据库 3.大数据热门技术Flink新版本 4.Flink join 实战 5.Flink 自定义输出路径实战 6.全链路性能压力测试 7.虚拟化部署 8.集成指标明细查询 9.主流微服务后端系统 10.分钟级别与小时级别多时间方位分析 11.数据库实时同步解决方案 12.涵盖主流前端技术VUE+jQuery+Ajax+NodeJS 13.集成SpringCloud实现统一整合方案 14.互联网大数据企业热门技术栈 15.支持海量数据的实时分析 16.支持全端实时数据分析 17.全程代码实操,提供全部代码和资料 18.提供答疑和提供企业技术方案咨询 企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值