標籤:doc 大批量資料匯入 produce enter ref 開發 java arch dem
Apache Kafka系列(一) 起步
Apache Kafka系列(二) 命令列工具(CLI)
Apache Kafka系列(三) Java API使用
Apache Kafka系列(四) 多線程Consumer方案
Apache Kafka系列(五) Kafka Connect及FileConnector樣本一. Kafka Connect簡介
Kafka是一個使用越來越廣的訊息系統,尤其是在大資料開發中(即時資料處理和分析)。為何整合其他系統和解耦應用,經常使用Producer來發送訊息到Broker,並使用Consumer來消費Broker中的訊息。Kafka Connect是到0.9版本才提供的並極大的簡化了其他系統與Kafka的整合。Kafka Connect運用使用者快速定義並實現各種Connector(File,Jdbc,Hdfs等),這些功能讓大批量資料匯入/匯出Kafka很方便。
中所示,左側的Sources負責從其他異構系統中讀取資料並匯入到Kafka中;右側的Sinks是把Kafka中的資料寫入到其他的系統中。
二. 各種Kafka Connector
Kafka Connector很多,包括開源和商業版本的。如下列表中是常用的開源Connector
Connectors |
References |
Jdbc |
Source, Sink |
Elastic Search |
Sink1, Sink2, Sink3 |
Cassandra |
Source1, Source 2, Sink1, Sink2 |
MongoDB |
Source |
HBase |
Sink |
Syslog |
Source |
MQTT (Source) |
Source |
Twitter (Source) |
Source, Sink |
S3 |
Sink1, Sink2
|
商業版的可以通過Confluent.io獲得
三. 樣本3.1 FileConnector Demo
本例示範如何使用Kafka Connect把Source(test.txt)轉為流資料再寫入到Destination(test.sink.txt)中。如所示:
本例使用到了兩個Connector:
- FileStreamSource:從test.txt中讀取並發布到Broker中
- FileStreamSink:從Broker中讀取資料並寫入到test.sink.txt檔案中
其中的Source使用到的設定檔是${KAFKA_HOME}/config/connect-file-source.properties
name=local-file-sourceconnector.class=FileStreamSourcetasks.max=1file=test.txttopic=connect-test
其中的Sink使用到的設定檔是${KAFKA_HOME}/config/connect-file-sink.properties
name=local-file-sinkconnector.class=FileStreamSinktasks.max=1file=test.sink.txttopics=connect-test
Broker使用到的設定檔是${KAFKA_HOME}/config/connect-standalone.properties
bootstrap.servers=localhost:9092key.converter=org.apache.kafka.connect.json.JsonConvertervalue.converter=org.apache.kafka.connect.json.JsonConverterkey.converter.schemas.enable=truevalue.converter.schemas.enable=trueinternal.key.converter=org.apache.kafka.connect.json.JsonConverterinternal.value.converter=org.apache.kafka.connect.json.JsonConverterinternal.key.converter.schemas.enable=falseinternal.value.converter.schemas.enable=falseoffset.storage.file.filename=/tmp/connect.offsetsoffset.flush.interval.ms=10000
3.2 運行Demo
需要熟悉Kafka的一些命令列,參考本系列之前的文章Apache Kafka系列(二) 命令列工具(CLI)
3.2.1 啟動Kafka Broker
[[email protected] bin]# cd /opt/kafka_2.11-0.11.0.0/[[email protected] kafka_2.11-0.11.0.0]# lsbin config libs LICENSE logs NOTICE site-docs[[email protected] kafka_2.11-0.11.0.0]# ./bin/zookeeper-server-start.sh ./config/zookeeper.properties &
[[email protected] kafka_2.11-0.11.0.0]# ./bin/kafka-server-start.sh ./config/server.properties &
3.2.2 啟動Source Connector和Sink Connector
[[email protected] kafka_2.11-0.11.0.0]# ./bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties
3.3.3 開啟console-consumer
./kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic connect-test
3.3.4 寫入到test.txt檔案中,並觀察3.3.3中的變化
[[email protected] kafka_2.12-0.11.0.0]# echo ‘firest line‘ >> test.txt[[email protected] kafka_2.12-0.11.0.0]# echo ‘second line‘ >> test.txt3.3.3中開啟的視窗輸出如下{"schema":{"type":"string","optional":false},"payload":"firest line"}{"schema":{"type":"string","optional":false},"payload":"second line"}
3.3.5 查看test.sink.txt
[[email protected] kafka_2.12-0.11.0.0]# cat test.sink.txt firest linesecond line
四. 結論
本例僅僅示範了Kafka內建的File Connector,後續文章會完成JndiConnector,HdfsConnector,並且會使用CDC(Changed Data Capture)整合Kafka來完成一個ETL的例子
PS:
相比編譯過Kafka-Manager都知道各種坑,經過了3個小時的努力,我終於把Kafka-Manager編譯通過並打包了,並且新增了Kafka0.11.0版本支援。
附: 連結: https://pan.baidu.com/s/1miiMsAk 密碼: 866q
Apache Kafka系列(五) Kafka Connect及FileConnector樣本