基于Flink CDC构建MySQL和PostgreSQL的Streaming ETL

这篇教程详细介绍了如何借助Flink CDC从MySQL和PostgreSQL数据库构建实时ETL流程,将数据整合并写入Elasticsearch。通过Docker Compose设置环境,涉及Flink、MySQL、PostgreSQL和Elasticsearch的配置与操作,以及在Flink SQL CLI中创建和管理表,实现数据的实时同步与更新。
摘要由CSDN通过智能技术生成

基于Flink CDC构建MySQL和PostgreSQL的Streaming ETL

​ 本文将展示如何基于Flink CDC快速构建MySQL和PostgreSQL的ETL。本教程的演示将在Flink SQL CLI中进行,只涉及 SQL,不需要 Java/Scala 代码,也不需要安装 IDE。

​ 假设我们正在经营电子商务业务,商品和订单的数据存储在MySQL数据库中,订单的物流信息存储在 PostgreSQL数据库中。对于订单表,为了方便进行分析,我们希望找到的相关商品和物流信息上对应的商品和物流信息构成一张宽表,并且实时把它写到Elasticsearch中。

​ 接下来的内容将介绍如何使用 Flink Mysql/PostgreSQL CDC来实现这个需求,系统的整体架构如下图所示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nw1GqSA9-1639730289994)(/Users/ylchou/Library/Application Support/typora-user-images/flink-cdc-streaming-etl.png)]

准备阶段

​ 准备一台已经安装了Docker和Docker Compose的Linux或者MacOS电脑。

准备教程所需要的组件

后文以docker-compose的方式准备所需要的组件。

使用下面的内容创建一个docker-compose.yml文件:

version: '2.1'
services:
  postgres:
    image: debezium/example-postgres:1.1
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=1234
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  mysql:
    image: debezium/example-mysql:1.1
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_USER=mysqluser
      - MYSQL_PASSWORD=mysqlpw
  elasticsearch:
    image: elastic/elasticsearch:7.6.0
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
    ports:
      - "9200:9200"
      - "9300:9300"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
  kibana:
    image: elastic/kibana:7.6.0
    ports:
      - "5601:5601"

该 Docker Compose 中包含的容器有:

  • MySQL:商品表products和订单表orders将存储在该数据库中,这两张表将和 Postgres 数据库中的物流表shipments进行,得到一张包含更多信息的订单表enriched_orders
  • PostgreSQL:物流表shipments将存储在该数据库中。
  • Elasticsearch:最终的订单表enriched_orders将写到Elasticsearch。
  • Kibana:支持可视化 ElasticSearch 的数据。

docker-compose.yml文件所在目录下执行下面的命令来启动本文需要的组件(MySQL、PostgreSQL、Elasticsearch、Kibana):

docker-compose up -d

该命令自动下载Docker Compose配置中定义的镜像(如果本地没有镜像的话)和启动Docker Compose配置中定义的所有容器。可以通过docker ps或docker-compose ps来观察上述的容器是否正常启动了,也可以通过访问http://localhost:5601/来查看Kibana是否运行正常。

执行docker ps可以看到:

CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                                            NAMES
b099f347ea05        debezium/example-mysql:1.1      "docker-entrypoint..."   2 hours ago         Up 2 hours          0.0.0.0:3306->3306/tcp, 33060/tcp                flinkdockercompose_mysql_1
1f5cf35b9b25        debezium/example-postgres:1.1   "docker-entrypoint..."   2 hours ago         Up 2 hours          0.0.0.0:5432->5432/tcp                           flinkdockercompose_postgres_1
363a1bad8e46        elastic/elasticsearch:7.6.0     "/usr/local/bin/do..."   2 hours ago         Up 2 hours          0.0.0.0:9200->9200/tcp, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值