0%

综合实训调研

由于综合实践项目需要用到Flink CDC、Kafka、ElasticSearch、Kibana、Doris,以下是对这些框架/技术的调研

Flink CDC

Flink CDC 是一个基于流的数据集成工具,旨在为用户提供一套功能更加全面的编程接口(API)。

事件

事件分为DataChangeEvent、SchemaChangeEvent、Flow of Events

DataChangeEvent

DataChangeEvent 描述了源中的数据变更。它由 5 个字段组成:

  • Table ID:事件所属的表 ID
  • Before:数据的前置图像
  • After:数据的后置图像
  • Operation type:变更操作的类型
  • Meta:变更的元数据

操作类型字段预定义了 4 种操作类型:

  • 插入(Insert):新数据条目,before = null,after = 新数据
  • 删除(Delete):数据删除,before = 被删除的数据,after = null
  • 更新(Update):已存在数据的更新,before = 变更前的数据,after = 变更后的数据
  • 替换(Replace)

SchemaChangeEvent

SchemaChangeEvent 描述了外部系统中表结构的更改

  • AddColumnEvent:表中的新列
  • AlterColumnTypeEvent:列类型的更改
  • CreateTableEvent:创建新表。也用于描述预发出的 DataChangeEvent 的模式
  • DropColumnEvent:删除列
  • RenameColumnEvent:列名更改

事件流

如果一个表对框架是新的,则在任何 DataChangeEvent 之前必须发出 CreateTableEvent;如果表的 schema 发生变化,则必须在任何 DataChangeEvent 之前发出 SchemaChangeEvent。

如何使用 Flink CDC

MySQL 同步到 Doris
Flink CDC 提供了基于 YAML 格式的用户 API,更适合于数据集成场景。以下是一个 YAML 文件的示例,它定义了一个数据管道(Pipeline),该Pipeline从 MySQL 捕获实时变更,并将它们同步到 Apache Doris:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
source:
type: mysql
hostname: localhost
port: 3306
username: root
password: 123456
tables: app_db.\.*
server-id: 5400-5404
server-time-zone: UTC

sink:
type: doris
fenodes: 127.0.0.1:8030
username: root
password: ""
table.create.properties.light_schema_change: true
table.create.properties.replication_num: 1

pipeline:
name: Sync MySQL Database to Doris
parallelism: 2

源数据库(source)是 MySQL,连接信息包括主机名(localhost)、端口(3306)、用户名(root)、密码(123456)、表(app_db下的所有表)、服务器ID(5400-5404)和服务器时区(UTC)。
目标数据库(sink)是 Doris,连接信息包括FE节点(127.0.0.1:8030)、用户名(root)、密码(空字符串,即没有密码)、表创建属性(包括轻量模式变更和复制数等设置)。
Pipeline 部分定义了数据同步任务的名称(Sync MySQL Database to Doris)和并行度(2)。

Kafka

Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统。

主要术语

以下文段摘录于 kafka 官方。

An event records the fact that “something happened” in the world or in your business. It is also called record or message in the documentation. When you read or write data to Kafka, you do this in the form of events. Conceptually, an event has a key, value, timestamp, and optional metadata headers.
An example:

  • key:“Alice”
  • value:“向 Bob 支付了 200 美元”
  • timestamp:“2020 年 6 月 25 日下午 2:06”。

Producers are those client applications that publish (write) events to Kafka, and consumers are those that subscribe to (read and process) these events.

Events are organized and durably stored in topics. A topic is similar to a folder in a filesystem, and the events are the files in that folder. Topics in Kafka are always multi-producer and multi-subscriber.

Topics are partitioned, meaning a topic is spread over a number of “buckets” located on different Kafka brokers.

Kafka 保证具有相同 Key 的事件写入被同一分区,读取时按写入顺序读。但是 Kafka 不保证不同 Partition 获取的信息是有序的,只保证同 Partition 内消息有序。

快速入门 Kafka

快速入门

Kafka 和 RabbitMQ 的区别

特性 RabbitMQ Kafka
架构 RabbitMQ 的架构专为复杂的消息路由而设计。该代理使用推送模型。生产者使用不同的规则向使用者发送消息。 Kafka 使用基于分区的设计进行实时、高吞吐量的流处理。该代理使用拉取模型。生产者向使用者订阅的主题和分区发布消息。
消息处理 RabbitMQ 代理监控消息使用。此代理会在消息被使用后将其删除。它支持消息优先级。 使用者使用偏移跟踪器跟踪消息检索情况。Kafka 根据保留策略保留消息。其中没有消息优先级。
性能 RabbitMQ 提供低延迟。它每秒发送数千条消息。 Kafka 每秒可实时传输多达数百万条消息。
编程语言 RabbitMQ 支持多种语言和旧式协议。 Kafka 的编程语言选择有限。该代理在 TCP 上使用二进制协议进行数据传输。

ElasticSearch

Elasticsearch is a distributed document store. Instead of storing information as rows of columnar data, Elasticsearch stores complex data structures that have been serialized as JSON documents.

Elasticsearch REST API 支持结构化查询、全文查询和将两者结合在一起的查询的复杂查询

和普通的数据库模糊搜索不同,Elasticsearch 的模糊搜索是能使用上索引的,所以在大数据场景下搜索速度快;而且,Elasticsearch 的模糊搜索支持排序,只返回排名高的记录;另外,Elasticsearch 的模糊搜索在遇到不太准确的关键字时也能搜出相关结果。

Kibana

Kibana enables you to give shape to your data and navigate the Elastic Stack

Kibana 和 ElasticSearch 关系

Kibana 运行在 Elasticsearch 之上,主要用于分析日志消息。

赏个鸡腿🍗