1. 程式人生 > >Kafka教程(二)---------------Kafka架構初識

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都會進行備份