Kafka的概念:
1、 AMQP協議
Advanced Message Queuing Protocol (高級消息隊列協議)
The Advanced Message Queuing Protocol (AMQP):
是一個標准開放的應用層的消息中間件(Message Oriented Middleware)協議。AMQP定義了通過網絡發送的字節流的數據格式。因此兼容性非常好,任何實現AMQP協議的程序都可以和與AMQP協議兼容的其他程序交互,可以很容易做到跨語言,跨平台。
2、消費者:(Consumer):從消息隊列中請求消息的客戶端應用程序
3、生產者:(Producer) :向broker發布消息的應用程序
4、AMQP服務端(broker):用來接收生產者發送的消息並將這些消息路由給服務器中的隊列,便於fafka將生產者發送的消息,動態的添加到磁盤並給每一條消息一個偏移量,所以對於kafka一個broker就是一個應用程序的實例
Kafka架構
生產者生產消息、kafka集群、消費者獲取消息這樣一種架構,如下圖:

kafka集群中的消息,是通過Topic(主題)來進行組織的,如下圖:

1、主題(Topic):一個主題類似新聞中的體育、娛樂、教育等分類概念,在實際工程中通常一個業務一個主題。
2、分區(Partition):一個Topic中的消息數據按照多個分區組織,分區是kafka消息隊列組織的最小單位,一個分區可以看作是一個FIFO( First Input First Output的縮寫,先入先出隊列)的隊列。
工作圖:

根據以上架構圖代碼演示:
1. 創建Topic:
./kafka-topics.sh --create --zookeeper hadoop1:2181,hadoop2:2181,hadoop3:2181 --replication-factor 2 --partitions 3 --topic partitionTopic

2. ./kafka-topics.sh --describe --zookeeper hadoop1:2181,hadoop2:2181,hadoop3:2181 --topic partitionTopic
可以看見我們一共有3個分區分別是0,1,2, replica 有2個。這和我們在上面命令設置的是一致的。
partition 0 的leader在broker1, follower在broker2
partition 1 的leader在broker2, follower在broker0
partition 2 的leader在broker0, follower在brokder1
一個patition只會在一個broker上,replica被均勻的分布在各個kafka server(broker)上

如果replicas 數設置大於 broker數會出現什么情況呢?
Kafka並不允許這種情況發生,因為在一個broker上如果有2個replica其實是沒有意義的,因為再多的replica同時在一台broker上,隨着該broker的crash,一起不可用。
