下載、安裝
官網下載
然后解壓
> tar -xzf kafka_2.11-0.10.2.0.tgz
> cd kafka_2.11-0.10.2.0
linux用戶使用bin/
目錄下的命令,Windows用戶可以使用bin/windows/
下的命令
使用
啟動服務
kafka依賴于ZooKeeper,如果沒有安裝zookeeper,可以用kafka包里面現成的:
> bin/zookeeper-server-start.sh config/zookeeper.properties
[2017-06-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...
然后啟動kafka
> bin/kafka-server-start.sh config/server.properties
[2017-06-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties)
[2017-06-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties)
...
創建主題
創建一個test
主題,1個分區,1個副本
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
看一眼剛才創建的主題
> bin/kafka-topics.sh --list --zookeeper localhost:2181
test
注:如果不想手動創建主題,你可以自動創建
發消息
運行kafka自帶的客戶端發一些消息試試。默認情況下,每一行作為一條消息發出去。
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message
消費
然后用kafka自帶的消費者輸出
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message
提示:
如果上面的每個命令都在不同的終端中運行,你就可以在生產者終端中輸入消息后,在消費者終端中看到。
啟動一個多broker的集群
目前我們已經運行了一個單broker的kafka,只是有一個節點的集群。再讓我們擴展到三個節點玩一下。
為其他兩個節點復制一下配置文件:
> 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
abroker.id
是集群中每個節點的唯一識別。我們也要改一下節點的端口和日志路徑,主要因為是在本地環境,如果在多臺機器上,就可以不改端口和日志路徑了。
前面已經啟動了zk,和一個幾點,現在我們只需啟動另外兩個節點:
> bin/kafka-server-start.sh config/server-1.properties &
...
> bin/kafka-server-start.sh config/server-2.properties &
...
現在我們創建一個1個分區3個副本的新主題:
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
現在我們有一個kafka集群了,那么我們怎么知道哪個broker在做什么呢? 運行describe topics
命令看看:
> 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: 1,2,0 Isr: 1,2,0
第一行給出了所有分區的摘要,每個附加行提供有關一個分區的信息。 因為這個主題只有一個分區,只有一行。
- “leader”是負責給定分區的所有讀取和寫入的節點。 每個節點將成為隨機選擇的分區部分的引導者。
- “replicas”是復制此分區日志的節點的列表,無論它們是不是leader。
- “isr”是一組“同步”副本。 這是副本列表的子集,該副本目前正在生效并被leader所追蹤。
我們可以再看一下最開始創建的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
往新的主題發一些消息:
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
...
my test message 1
my test message 2
消費一下這些消息:
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2
容錯
現在我們來測試容錯。 broker 1作為 leader,我們kill一下試試:
> ps aux | grep server-1.properties
7564 ttys002 0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.8/Home/bin/java...
> kill -9 7564
win用戶可以用這個命令:
> wmic process get processid,caption,commandline | find "java.exe" | find "server-1.properties"
java.exe java -Xmx1G -Xms1G -server -XX:+UseG1GC ... build\libs\kafka_2.10-0.10.2.0.jar" kafka.Kafka config\server-1.properties 644
> taskkill /pid 644 /f
leader已切換到其中一個slaves節點,節點1不再處于同步副本集中:
> 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: 2 Replicas: 1,2,0 Isr: 2,0
不過消息仍然可以消費,即便剛才的leader已經掛掉了:
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2