Kafka Connect相关插件配置文档之一

601 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

本文档主要是对JDBC Source、Sink与HDFS Sink插件相关文档的介绍以及简单的demo示例。对应的HDFS3 版本、HDFS2 Source 版本官方没有开源需要授权后使用(试用期30天),本文档暂不涉及。对HDFS3-Sink组件相关文档的整理过程中与到组件内部目前存在bug需要待修复,可以把数据存储到HDFS,但是在自动创建Hive的外部表时无法获取到对应的MetaStore的元数据信息,导致创建失败。经过测试HDFS2-Sink目前满足数据到Hadoop3 集群存储数据以及自动创建Hive的外部表。**HDFS-Sink的替代方案目前可以使用HDFS2-Sink版本。**针对HDFS2-Sink目前针对相关业务存储bug,内部实现是依靠flush.size来刷新文件的,当写入的条数不足时将不会刷新导致数据丢失(需要针对特定版本进行完善)。JDBC在本次的测试整理中未发现问题。

一、HDFS 2 Sink 插件

通过Kafka Connect HDFS 2连接器,您可以将多种格式的数据从Kafka主题导出到HDFS 3.x文件,并与Hive集成以使数据立即可用于通过HiveQL查询。

连接器会定期轮询来自ApacheKafka®的数据,并将其写入HDFS。来自每个Kafka主题的数据由提供的分区程序进行分区,并分为多个块。每个数据块都表示为一个HDFS文件,其中包含主题,Kafka分区,该数据块在文件名中的开始和结束偏移量。如果未在配置中指定分区程序,则使用保留Kafka分区的默认分区程序。每个数据块的大小取决于写入HDFS的记录数,写入HDFS的时间以及架构兼容性。

HDFS连接器与Hive集成在一起,启用后,该连接器会自动为每个Kafka主题创建一个外部Hive分区表,并根据HDFS中的可用数据更新该表。

1.1主要功能点

  • 完全一次交付:连接器使用写日志来确保每个记录仅一次导出到HDFS。另外,连接器通过将Kafka偏移信息编码到文件中来管理偏移提交,以便我们可以从最后提交的偏移开始,以防失败和任务重新启动。

  • 可扩展的数据格式:该连接器开箱即用,支持以Avro和Parquet格式将数据写入HDFS。另外,您可以通过扩展Format类将其他格式写入HDFS 。

  • Hive集成:连接器开箱即用地支持Hive集成,启用后,连接器会为导出到HDFS的每个主题自动创建Hive外部分区表。

  • 安全HDFS和Hive Metastore支持:连接器支持Kerberos身份验证,因此可与安全HDFS和Hive Metastore一起使用。

  • 可插拔分区程序:该连接器支持默认分区程序,字段分区程序和基于时间的分区程序,包括开箱即用的每日和每小时分区程序。您可以通过扩展Partitioner类来实现自己的分区程序。另外,您可以通过扩展TimeBasedPartitioner类来自定义基于时间的分区程序。

  • **模式演变:**仅当使用默认命名策略()生成记录时,模式演变才起作用TopicNameStrategy。如果使用其他命名策略,则可能会发生错误。这是因为记录彼此不兼容。如果使用其他命名策略,schema.compatibility则应设置为NONE。这可能会导致目标文件较小,因为每次模式ID在记录之间更改时,接收器连接器都会创建一个新文件。有关命名策略的更多信息,请参见主题名称策略

1.2 环境准备

  • Kafka 0.11.0版本以上
  • Kafka connect 版本0.11.0以上
  • Java 1.8
  • HDFS 3.X集群
  • Hive 3.x

1.3 HDFS 2 Sink 安装

本安装推荐手动安装(未使用confluent-hub)。

  1. 下载并解压缩您的连接器的ZIP文件,然后按照手动的连接器安装说明进行操作
  2. 解压缩ZIP文件内容,然后将内容复制到所需位置。例如,您可以创建一个名为的目录,/share/kafka/plugins(自定义此路径)然后复制连接器插件的内容。
  3. 将此添加到Connect属性文件中的插件路径。例如,plugin.path=/usr/local/share/kafka/plugins(自定义的路径)Kafka Connect使用其插件路径查找插件。插件路径是在Kafka Connect的worker配置中定义的目录的逗号分隔列表。
  4. 使用该配置启动Connect worker。Connect将发现这些插件中定义的所有连接器。
  5. 对运行Connect的每台计算机重复这些步骤。每个工人上必须有每个连接器。
  6. 运行命令查看刚安装的插件是否显示curl -X GET http://localhost:8083/connector-plugins

1.4 快速开始

此快速入门使用HDFS连接器将Avro控制台生产者产生的数据导出到HDFS。请确保Hadoop在本地或远程运行,并且您知道HDFS URL。对于Hive集成,您需要安装Hive并了解metastore thrift URI。此快速入门假定您使用默认配置启动了所需的服务,并且应根据使用的实际配置进行必要的更改。

注意: 您需要确保连接器用户对topics.dir和中指定的目录具有写权限logs.dir。的默认值topics.dir/topics和的默认值logs.dir/logs。如果您未指定两个配置,请确保连接器用户对/topics和具有写权限/logs。您可能需要先创建/topics/logs在运行连接器之前,因为连接器可能没有对的写权限/

# 流作业
curl -i -k  -H "Content-type: application/json" -X POST -d  '{
  "name": "hdfs3-sink-hive",
  "config": {
    "connector.class": "io.confluent.connect.hdfs.HdfsSinkConnector",
    "tasks.max": "1",
    "topics": "dataxhive",
    "hdfs.url": "hdfs://master:9002",
    "flush.size": "3",
    "key.converter": "org.apache.kafka.connect.storage.StringConverter",
    "value.converter": "io.confluent.connect.avro.AvroConverter",
    "value.converter.schema.registry.url":"http://master:8081",
    "confluent.topic.bootstrap.servers": "slaver:9092",
    "confluent.topic.replication.factor": "1",
	"hive.integration":"true",
    "hive.metastore.uris":"thrift://master:9083",
    "schema.compatibility":"BACKWARD"
  }
}' http://localhost:8083/connectors

注意:前几个设置是您将为所有连接器指定的通用设置。该topics 参数指定要从中导出数据的主题。在这种情况下dataxtesthdfs.url 指定已写入数据的HDFS。您应该根据您的配置进行设置。 flush.size指定在调用文件提交之前连接器需要写入的记录数(重要此参数控制着什么时间刷新并提交文件,可能会造成数据丢失)。对于高可用性HDFS部署,设置hadoop.conf.dir为包含的目录 hdfs-site.xml。之后hdfs-site.xml到位,并hadoop.conf.dir 已定,hdfs.url可设置为namenodes名称服务ID,例如nameservice1

# 批作业读取数据后写入hdfs中并创建hive外部表
curl -i -k  -H "Content-type: application/json" -X POST -d  '{
  "name": "hdfs3-sink-hive",
  "config": {
    "connector.class": "io.confluent.connect.hdfs.HdfsSinkConnector",
    "tasks.max": "1",
    "topics": "dataxhive",
    "hdfs.url": "hdfs://master:9002",
    "flush.size": "3",
    "key.converter": "org.apache.kafka.connect.storage.StringConverter",
    "value.converter": "io.confluent.connect.avro.AvroConverter",
    "value.converter.schema.registry.url":"http://slaver:8081",
    "confluent.topic.bootstrap.servers": "master:9092",
    "confluent.topic.replication.factor": "1",
	"hive.integration":"true",
    "hive.metastore.uris":"thrift://master:9083",
    "schema.compatibility":"BACKWARD",
	"type":"key",
    "offsetKey":"dataxhive"
  }
}' http://localhost:8083/connectors