实现将kafka数据存入HDFS中
1、 Kafka Connect是一个用于将数据流输入和输出Kafka的框架。Confluent平台附带了几个内置connector,可以使用这些connector进行关系数据库或HDFS等常用系统到kafka的数据传输
2、相关概念:
- Connectors:通过管理task来协调数据流的高级抽象
Kafka Connect中的connector定义了数据应该从哪里复制到哪里。connector实例是一种逻辑作业,负责管理Kafka与另一个系统之间的数据复制。
- Tasks:如何将数据复制到Kafka或从Kafka复制数据的实现
Task是Connect数据模型中的主要处理数据的角色。每个connector实例协调一组实际复制数据的task。通过允许connector将单个作业分解为多个task,Kafka Connect提供了内置的对并行性和可伸缩数据复制的支持,只需很少的配置。这些任务没有存储任何状态。任务状态存储在Kafka中的特殊主题config.storage.topic和status.storage.topic中。因此,可以在任何时候启动、停止或重新启动任务,以提供弹性的、可伸缩的数据管道。
- Workers:执行Connector和Task的运行进程
当connector首次提交到集群时,workers会重新平衡集群中的所有connector及其tasks,以便每个worker的工作量大致相同。当connector增加或减少它们所需的task数量,或者更改connector的配置时,也会使用相同的重新平衡过程。当一个worker失败时,task在活动的worker之间重新平衡。当一个task失败时,不会触发再平衡,因为task失败被认为是一个例外情况。因此,失败的task不会被框架自动重新启动,应该通过REST API重新启动。
有两种方式:
(1)Standalone模式是最简单的模式,用单一进程负责执行所有connector和task。
(2) Distributed Works 分布式模式为Kafka Connect提供了可扩展性和自动容错能力。在分布式模式下,你可以使用相同的组启动许多worker进程。它们自动协调以跨所有可用的worker调度connector和task的执行。如果你添加一个worker、关闭一个worker或某个worker意外失败,那么其余的worker将检测到这一点,并自动协调,在可用的worker集重新分发connector和task。
- Converters: 用于在Connect和外部系统发送或接收数据之间转换数据的代码
在向Kafka写入或从Kafka读取数据时,Converter是使Kafka Connect支持特定数据格式所必需的。task使用转换器将数据格式从字节更改为连接内部数据格式,反之亦然
- Transforms:更改由连接器生成或发送到连接器的每个消息的简单逻辑
默认提供以下converters:
-
AvroConverter(建议):与Schema Registry一起使用
- JsonConverter:适合结构数据
- StringConverter:简单的字符串格式
-
ByteArrayConverter:提供不进行转换的“传递”选项
转换器与连接器本身解耦,以便在连接器之间自然地重用转换器。