第 4 章 关于 Kafka 连接
Kafka Connect 是一个在 Kafka 代理和其他系统间流传输数据的集成工具包。其他系统通常是外部数据源或目标,如数据库。
Kafka Connect 使用插件架构为连接器提供实施工件。插件允许连接到其他系统,并提供额外的配置来操作数据。插件包括连接器和其他组件,如数据转换器和转换。连接器使用特定类型的外部系统运行。每个连接器都定义了其配置架构。您提供到 Kafka Connect 的配置,以在 Kafka Connect 中创建连接器实例。然后,连接器实例定义了一组用于在系统之间移动数据的任务。
AMQ Streams 以分布式模式运行 Kafka Connect,在一个或多个 worker pod 间分布数据流任务。Kafka Connect 集群由一组 worker pod 组成。每个连接器都在单个 worker 上实例化。每个连接器由一个或多个在 worker 组分发的任务组成。在 worker 间分布允许高扩展管道。
worker 将数据从一个格式转换为适合源或目标系统的另一种格式。根据连接器实例的配置,worker 也可能应用转换(也称为 Single Message Transforms 或 SMT)。在信息被转换前,会对信息进行调整,如过滤某些数据。Kafka Connect 有一些内置转换,但在需要时可以通过插件来提供其他转换。
4.1. Kafka 连接流数据
Kafka Connect 使用连接器实例来与其他系统集成以流传输数据。
Kafka Connect 在启动时加载现有连接器实例,并在 worker pod 间分配数据流任务和连接器配置。worker 为连接器实例运行任务。每个 worker 作为单独的 pod 运行,使 Kafka Connect 集群更具容错性。如果任务数量超过 worker,则 worker 会被分配多个任务。如果 worker 失败,其任务会自动分配给 Kafka Connect 集群中的活跃 worker。
流数据中使用的主要的 Kafka Connect 组件如下:
- 创建任务的连接器
- 移动数据的任务
- 用于运行任务的 worker
- 转换为操作数据
- 用于转换数据的转换器
4.1.1. 连接器
连接器可以是以下类型之一:
- 将数据推送到 Kafka 的源连接器
- 从 Kafka 中提取数据的接收器连接器
插件提供了 Kafka 连接到运行连接器实例的实施。连接器实例创建在 Kafka 中传输数据所需的任务。Kafka Connect 运行时编配在 worker pod 间分离所需工作的任务。
MirrorMaker 2 也使用 Kafka Connect 框架。在这种情况下,外部数据系统是另一个 Kafka 集群。MirrorMaker 2 的专用连接器管理源和目标 Kafka 集群之间的数据复制。
除了 MirrorMaker 2 连接器外,Kafka 还提供了两个连接器作为示例:
-
FileStreamSourceConnector
将来自 worker 文件系统上的文件的数据流到 Kafka,读取输入文件并将每行发送到给定的 Kafka 主题。 -
FileStreamSinkConnector
将数据从 Kafka 流传输到 worker 文件系统,读取 Kafka 主题的消息并在输出文件中写入一行。
以下源连接器图显示了源连接器的进程流,该连接器从外部数据系统中流传输记录。Kafka Connect 集群可以同时运行源和接收器连接器。Worker 在集群的分布式模式下运行。worker 可以为多个连接器实例运行一个或多个任务。
Source 连接器流数据到 Kafka
- 插件为源连接器提供实施工件
- 单个 worker 启动源连接器实例
- 源连接器创建流数据的任务
- 任务并行运行,以轮询外部数据系统和返回记录
- 转换会调整记录,如过滤或重新标记它们
- 转换器将记录置于适合 Kafka 的格式中
- 源连接器使用 KafkaConnectors 或 Kafka Connect API 进行管理
以下接收器连接器图显示了将数据从 Kafka 流传输到外部数据系统时的流程流。
Kafka 中的接收器连接器流数据
- 插件为接收器连接器提供实施工件
- 单个 worker 启动接收器连接器实例
- sink 连接器创建用于流传输数据的任务
- 任务并行运行,以轮询 Kafka 和返回记录
- 转换器将记录置于适合外部数据系统的格式
- 转换会调整记录,如过滤或重新标记它们
- sink 连接器使用 KafkaConnectors 或 Kafka Connect API 进行管理
4.1.2. 任务
Kafka Connect 运行时编排的数据传输被分成并行运行的任务。使用连接器实例提供的配置启动任务。Kafka Connect 将任务配置分发给 worker,从而实例化和执行任务。
- 源连接器任务轮询外部数据系统,并返回 worker 发送到 Kafka 代理的记录列表。
- 接收器连接器任务从 worker 接收 Kafka 记录,以写入外部数据系统。
对于接收器连接器,所创建的任务数量与被消耗的分区数量相关。对于源连接器,源数据如何分区由连接器定义。您可以通过在连接器配置中设置 tasksMax
来控制可以并行运行的最大任务数量。连接器可能会创建比最大设置更少的任务。例如,如果无法将源数据分成多个分区,则连接器可能会创建较少的任务。
在 Kafka Connect 中,分区可能意味着一个主题分区,或外部系统中的数据分片。
4.1.3. Worker
worker 使用部署到 Kafka Connect 集群的连接器配置。配置存储在 Kafka Connect 使用的内部 Kafka 主题中。工作程序还可运行连接器及其任务。
Kafka Connect 集群包含一组具有相同 group.id
的 worker。ID 用于在 Kafka 中标识集群。该 ID 通过 KafkaConnect
资源在 worker 配置中分配。worker 配置还指定内部 Kafka Connect 主题的名称。主题存储连接器配置、偏移和状态信息。这些主题的组 ID 和名称对于 Kafka Connect 集群也必须是唯一的。
为 worker 分配一个或多个连接器实例和任务。以分布式部署的 Kafka Connect 具有容错和可扩展功能。如果 worker pod 失败,则会将其运行的任务重新分配给活跃 worker。您可以通过配置 KafkaConnect
资源中的 replicas
属性来添加到一组 worker pod。
4.1.4. 转换
Kafka Connect 可转换外部数据。单消息转换会将信息改为适合目标目的地的格式。例如,转换可能会插入或重命名字段。转换也可以过滤和路由数据。插件包含 worker 执行一个或多个转换所需的实施。
- 源连接器在将数据转换为 Kafka 支持的格式之前应用转换。
- sink 连接器会在将数据转换为适合外部数据系统的格式后进行转换。
一个转换包括封装在 JAR 文件中的一组 Java 类文件,用于包含在连接器插件中。Kafka Connect 提供了一组标准转换,但您也可以自行创建。
4.1.5. 转换器
当 worker 收到数据时,会使用转换器将数据转换为适当的格式。您可以在 KafkaConnect
资源中的 worker
配置中指定转换器。
Kafka Connect 可以从 Kafka 支持的格式(如 JSON 或 Avro)转换数据。它还支持构造数据的架构。如果您不将数据转换为结构化格式,则不需要启用架构。
您还可以为特定连接器指定转换器,以覆盖适用于所有 worker 的一般 Kafka Connect worker 配置。