一、Kafka Connect
Kafka Connect是在0.9以后加入的功能,主要是用来将其他系统的数据导入到Kafka,然后再将Kafka中的数据导出到另外的系统。主要由2中运行模式
本文是基于kafka 0.10.2,也适用于之后的版本
1.1 Standalone 单机模式
单机模式就是只用一个进程去处理数据,但是一个进程可以配置多个works
命令的使用模式
bin/connect-standalone.sh config/connect-standalone.properties connector1.properties [connector2.properties …]
- connect-standalone.properties:里面是一些公用配置,主要是用来配置work的,下面详细列举
- connector1.properties:可以是输入源配置,也就是导入到kafka的topic。也可以是输出源配置,也就是从kafka的topic导出数据。
1.1.1 connect-standalone.properties
- bootstrap.servers:无需解释
- key.converter:可是是
org.apache.kafka.connect.storage.StringConverter
或者org.apache.kafka.connect.json.JsonConverter
不配置默认是文本 - value.converter:一般是
org.apache.kafka.connect.json.JsonConverter
,不配置默认是文本 - key.converter.schemas.enable:key转换器的schema,这个一般都是配置成
false
. - value.converter.schemas.enable :key转换器的schema,这个一般都是配置成
false
- internal.key.converter:这是为了存储offset或者一些配置数据的key的转换器(因为有些offset可能要存储在topic中).参考
key.converter
- internal.value.converter:这是为了存储offset或者一些配置数据的value的转换器(因为有些offset可能要存储在topic中)参考
value.converter
- internal.key.converter.schemas.enable:参考
key.converter.schemas.enable
- internal.value.converter.schemas.enable:参考
value.converter.schemas.enable
- offset.storage.file.filename:这个是针对输入源的,也就是导入数据用的,他记录导入的offset信息
- offset.flush.interval.ms:offset保存间隔
一个配置Demo
bootstrap.servers=xxxx:9092
key.converter=org.apache.kafka.connect.storage.StringConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=flase
value.converter.schemas.enable=flase
internal.key.converter=org.apache.kafka.connect.storage.StringConverter
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false
offset.storage.file.filename=/tmp/connect.offsets
offset.flush.interval.ms=10000
1.1.2 输入源配置
- name:connector的唯一名字
- connector.class:用来连接Kafka集群的类名,也就是你继承SourceConnector的实现类,也就是Connector程序的入口,尽量使用全量路径名。如果从文件中读取书默认实现类是
FileStreamSource
- tasks.max:task的数量,一个task就是一个线程。task数量设置要小于等于分片partition的数量,多了并发度无法提高。
- file:数据应的文件
- topics:目的地topic。
一个配置Demo
name=local-file-source
connector.class=FileStreamSource
tasks.max=1
file=test.sink.txt
topic=xxxxx
1.1.3 输出源配置
- name:connector的唯一名字
- connector.class:用来连接Kafka集群的类名,也就是你继承
SinkConnector
的实现类,也就是Connector程序的入口,尽量使用全量路径名。如果从文件中读取书默认实现类是FileStreamSink
- tasks.max:task的数量,一个task就是一个线程。task数量设置要小于等于分片partition的数量,多了并发度无法提高。
- file:到处的数据的文件位置
- topics:要消费的topic列表
一个配置Demo
name=local-file-source
connector.class=FileStreamSource
tasks.max=1
file=test.sink.txt
topic=xxxx
从kafka的topic取出数据,然后存到文件test.sink.txt中
无法从指定分区里面取数据无法从给指定的offset取数据(其实也有解决办法,就是先执行导出,然后停止,找到对应的消费组,更新消费组的offset为你想要的即可)
1.2 Distribute 分布式模式
这个模式目前没使用,感觉单机模式已经够用