kafka官方文件學習筆記2–QuickStart
下載kafka
https://www.apache.org/dyn/closer.cgi?path=/kafka/1.0.0/kafka_2.11-1.0.0.tgz
解壓安裝包
> tar -xzf kafka_2.11-1.0.0.tgz
> cd kafka_2.11-1.0.0/bin
檢視bin目錄下主要幾個指令碼功能如下:
指令碼 | 功能 |
---|---|
kafka-server-start.sh | 啟動kafka伺服器; |
kafka-server-stop.sh | 停止kafka伺服器; |
kafka-topics.sh | topic管理; |
kafka-console-producer.sh | 基於命令列的生產者; |
kafka-console-consumer.sh | 基於命令列的消費者; |
kafka-run-class.sh | 執行java類的指令碼,由kafka-server-start.sh和kafka-server-stop.sh、kafka-topics.sh等指令碼呼叫; |
zookeeper-server-start.sh | 啟動kafka自帶的zookeeper伺服器; |
zookeeper-server-stop.sh | 停止kafka自帶的zookeeper伺服器; |
zookeeper-shell.sh | 在命令列連線zookeeper的客戶端工具; |
connect-standalone.sh | 在命令列啟動單點的connector; |
connect-distributed.sh | 在命令列啟動基於叢集connector; |
注:kafka的安裝包除了包括kafka自身的工具以外,也包括了一系列簡易的zookeeper工具,能夠通過zookeeper-server-start.sh指令碼啟動簡易的單點zookeeper例項,供kafka使用。但一般僅限於測試環境使用;
config目錄下存放的是kafka服務、自帶zk服務以及基於命令列的生產者、消費者工具對應的配置檔案,常用如下:
指令碼 | 功能 |
---|---|
server.properties | kafka例項的配置檔案,配置kafka最重要的配置檔案; |
log4j.properties | kafka日誌配置; |
zookeeper.properties | 自帶zk的配置檔案; |
producer.properties | 基於命令列的生產者工具配置檔案;(測試用) |
consumer.properties | 基於命令列的消費者工具配置檔案;(測試用) |
connect-standalone.properties | 自帶單點connector的配置檔案,存放connector的序列化方式、監聽broker的地址埠等通用配置;(測試用) |
connect-file-source.properties | 配置檔案讀取connector,用於逐行讀取檔案,匯入入topic;(測試用) |
connect-file-sink.properties | 配置檔案寫入connector,用於將topic中的資料匯出到topic中;(測試用) |
啟動zk服務,預設埠:2181
> bin/zookeeper-server-start.sh config/zookeeper.properties
[2018-01-16 20:22:52,327] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...
啟動kafka服務,預設埠:9092
> bin/kafka-server-start.sh config/server.properties
[2018-01-16 20:23:52,758] INFO KafkaConfig values:
...
經過如上兩步,我們就啟動了一個簡易的kafka叢集(具有1個zookeeper例項和1個kafka例項的叢集)
檢視zookeeper中存放的kafka資訊
> bin/zookeeper-shell.sh localhost:2181
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is disabled
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
ls /
[cluster, controller, controller_epoch, brokers, zookeeper, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config]
ls /brokers
[ids, topics, seqid]
ls /brokers/topics
[test]
ls /brokers/ids
[0]
“ls /”命令列出了zk根節點下的所有元素,可以看到kafka在zk中存放了叢集(cluster)、例項(brokers)、消費者(consumers)等資訊;zookeeper服務作為kafka的後設資料管理服務,因而每次對kafka服務操作都需要指定zookeeper服務的地址,以便於獲取kafka的後設資料,連線到正確的kafka叢集;
建立topic
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Created topic "test".
建立一個名為test的topic,包含1個複本,1個分割槽;
檢視叢集中的所有topic
> bin/kafka-topics.sh --list --zookeeper localhost:2181
test
啟動生產者,並寫入測試訊息
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
> Hello World1
> I`m a programer
啟動消費者,接收訊息
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
Hello World1
I`m a programer
可以看到生產者寫入的訊息,都能夠立刻被消費者接收並列印出來。需要注意的是,生產者和消費者通過topic這個概念來建立聯絡,只有消費者指定與生產者相同的topic,才能夠消費其產生的消費;
刪除topic
> bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test
Topic test is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
建立多個kafka例項的叢集
拷貝配置檔案,修改例項ID、日誌目錄、監聽埠:
> cp config/server.properties config/server-1.properties
> cp config/server.properties config/server-2.properties
修改配置項如下:
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dir=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dir=/tmp/kafka-logs-2
啟動例項:
> bin/kafka-server-start.sh config/server-1.properties &
...
> bin/kafka-server-start.sh config/server-2.properties &
...
新建topic
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
Created topic "my-replicated-topic".
新建一個名為my-replicated-topic的topic,有3個副本和1個分割槽;
檢視topic狀態描述
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
topic上有幾個partition,就會展示幾行記錄;欄位含義如下:
- leader:標識當前partition的leader節點是那個,通過broker.id標識;一個partition只有一個leader節點,負責接收和處理讀寫請求;
- replicas:標識當前partition的所有副本所在的節點,無論節點是否是leader節點,也無論節點是否”存活”,通過broker.id標識;
- isr:標識存活且與leader節點同步的節點,即可用的副本(包括leader借點);通過broker.id標識;
檢視最初建立的test狀態描述:
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
可以看到,因為test只有1個副本、1個partition,所以只能分佈在一個例項上;
模擬leader切換
對於包含多個副本的topic而言,當一個副本所在的例項不可用時,將會從其它可用副本中選擇一個作為leader;
在叢集節點都正常的情況下,檢視topic的狀態:
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
關掉broker.id=0的例項,再次檢視,發現leader節點已經切換,同時isr中不包含”不可用”節點0:
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 0,1,2 Isr: 1,2
重新啟動broker.id=0的例項,再次檢視,發現isr中包括了節點0,說明可用。
使用kafka connect匯入/匯出資料
kafka connect是kafka與外部系統互動的工具,通過執行不同的connector,實現與不同外部系統的互動,包括資料的匯入/匯出。如下模擬從檔案匯入資料到kafka,以及從kafka匯出資料到檔案;
- 首先,建立檔案,寫入測試資料:
> cd kafka_2.11-1.0.0
> echo "Hello World" > test.txt
注:一定是在kafka根目錄中建立名為test.txt的檔案,否則不會讀取;
2.啟動2個單點的connector,這兩個connector都是kafka自帶的,一個用於讀取檔案寫入topic,另一個用於將topic中資料匯出到檔案;
> bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties
[2018-01-17 10:37:32,568] INFO Kafka Connect standalone worker initializing ... (org.apache.kafka.connect.cli.ConnectStandalone:65)
connect-console-source.properties檔案內容:
name=local-console-source
# connector入口
connector.class=org.apache.kafka.connect.file.FileStreamSourceConnector
tasks.max=1
# connector關聯的topic
topic=connect-test
connect-console-sink.properties檔案內容:
name=local-console-sink
# connector入口
connector.class=org.apache.kafka.connect.file.FileStreamSinkConnector
tasks.max=1
# connector關聯的topic
topics=connect-test
在kafka根目錄可以看到生成了名為test.sink.txt的檔案,其中的內容即為test.txt中的內容,持續向test.txt中append內容,test.sink.txt中的內容也隨之append;
注:因為同步過程是監聽檔案的增量變化,如果改變test.txt中舊有內容,則舊資料不發生變化,覆蓋同一行舊資料,貌似會產生一個空行;
整個同步過程是:
test.txt -> FileStreamSourceConnector -> connect-test(topic) -> FileStreamSinkConnector -> test.sink.txt
由於是通過topic存放過往資料,因此在topic中也可以看到相應的資料:
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginning
{"schema":{"type":"string","optional":false},"payload":"Hello World"}
{"schema":{"type":"string","optional":false},"payload":""}
{"schema":{"type":"string","optional":false},"payload":"Hello World1"}
{"schema":{"type":"string","optional":false},"payload":"Hello World2"}
使用kafka stream處理資料
參考官方文件:http://kafka.apache.org/10/documentation/streams/quickstart
kafka生態
kafka周邊包含很多元件,參看wiki:https://cwiki.apache.org/confluence/display/KAFKA/Ecosystem
相關文章
- Libevent 官方文件學習筆記(2. bufferevent部分)筆記
- Kafka 學習筆記Kafka筆記
- Kafka 學習筆記(二) :初探 KafkaKafka筆記
- Kafka學習筆記(二) :初探KafkaKafka筆記
- kafka學習筆記(一)Kafka筆記
- Libev 官方文件學習筆記 – 03:常用 watcher 介面筆記
- 《webpack文件》學習筆記Web筆記
- 【kafka學習筆記】kafka的基本概念Kafka筆記
- Spring框架學習筆記(一):官方文件介紹,IoC與AOP概念學習Spring框架筆記
- kafka官方幫助文件Kafka
- Spring框架學習筆記(二):官方文件Core Technologies – Part 1Spring框架筆記
- Kafka學習筆記(一) :為什麼需要Kafka?Kafka筆記
- Kafka 學習筆記(一) :為什麼需要 Kafka?Kafka筆記
- Kafka文件閱讀筆記(一)Kafka筆記
- React學習筆記2:React官方CommentBox實踐React筆記
- Kafka官方文件V2.7Kafka
- 《Kafka官方文件》設計(一)Kafka
- 官方文件學習:data guard broker
- Vue學習筆記2Vue筆記
- MySQL學習筆記2MySql筆記
- RocketMQ學習筆記 2MQ筆記
- Oracle學習筆記2Oracle筆記
- react學習筆記2React筆記
- mysql學習筆記-2MySql筆記
- jQuery學習筆記(2)jQuery筆記
- Scala學習筆記2筆記
- TestNG—學習筆記2筆記
- autolayout學習筆記_2筆記
- vue學習筆記-2Vue筆記
- 學習筆記2(下)筆記
- 官方遊戲--學習筆記二(英雄指令碼)遊戲筆記指令碼
- 史上最全、最詳細的 kafka 學習筆記!Kafka筆記
- 訊息中介軟體-kafka學習筆記一Kafka筆記
- kafka學習筆記1:測試環境搭建Kafka筆記
- koa2學習筆記筆記
- hibernate學習筆記(2)筆記
- Python學習筆記(2)Python筆記
- Android學習筆記(2)Android筆記