Kafka教程(二)---------------Kafka架構初識
一. 訊息佇列
1. 存在價值- 解耦
解耦訊息產出元件與接收訊息元件,如果兩者強關聯,那麼一邊有修改,另一邊就需要跟著修改
解耦之後,訊息產出元件與接收訊息元件可以自己獨立修改,並且還能橫向擴充套件
訊息佇列
- 資料備份
訊息會持久化或者其他方式儲存一段時間,兩端出現任何問題不會導致資料丟失,兩端服務在啟動之後可以恢復資料
- 非同步通訊
之前的方式,接收方必須及時接收訊息並進行儲存。引入訊息系統後訊息消費方可以自己控制何時去處理訊息資料
2. 常見訊息佇列
應用在分散式系統中的訊息佇列叫做分散式訊息佇列,常見的分散式訊息佇列有:ActiveMQ,RabbitMQ,kafka
二. Kafka shell操作
首先可以通過一系列操作對kafka有個直觀的認識,裡面的有些概念可能不明白,後面將會詳細講解
注意:下面操作中zkhost、kafkahost請各位都替換為自己的ip或者hostname
1) 建立topic
這個topic叫做test,只有一個分割槽,一個副本。
bin/kafka-topics.sh --create --zookeeper zkhost:2181 --replication-factor 1 --partitions 1 --topic test
2) 檢視所有topic
bin/kafka-topics.sh --list --zookeeper zkhost:2181
3) 向某個傳送訊息
bin/kafka-console-producer.sh --broker-list kafkahost:9092 --topic test
即可傳送訊息了
4) 接收訊息
bin/kafka-console-consumer.sh --zookeeper zkhost:2181 --topic test --from-beginning
5) 檢視topic詳情
bin/kafka-topics.sh --describe --zookeeper zkhost:2181 --topic test
6) 刪除topic
./bin/kafka-topics --delete --zookeeper zkhost:2181 --topic test
前提是server.properties中: delete.topic.enable=true
7) 查詢topic的offset的範圍
查詢topic名字為test的offset的最小值:
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list kafkahost:9092 -topic test --time -2
輸出
test:0:1288
查詢offset的最大值:
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list kafkahost:9092 -topic test --time -1
輸出
test:0:7885
從上面的輸出可以看出topic:test只有一個partition:0 offset範圍為:[1288,7885]
三. Kafka中的重要概念
- Broker
Kafka是分散式的,在kafka叢集中,每一個kafka服務程序都可以稱為一個broker
(可以和第一節的broker id進行對比)
- Topic
也就是訊息的名字,是業務上對訊息的分組與區分。比如:告警的訊息佇列、錯誤資訊的訊息佇列、問候資訊的訊息佇列。
- Partition
對於同一個topic,可以分為多個partition,比如topic1分為3個partition,partition0~partition2。相當於把一個整體分為3個部分,這樣就實現了負載均衡
所以可以看到,每個partition上的資料雖然不一定相鄰,但一定是有序的
至於每一條資料如何分配到不同的broker的,這個後一節實現細節中會詳細講解
- replication
為了保證資料的容錯性,通常會設定replication。這個就是資料備份的功能。
比如說設定為replication=2,那麼每個partition都會進行備份