Kafka是由Apache軟件基金會開發(fā)的一個開源流處理平臺摔握,由Scala和Java編寫。kafka 是一個高性能的消息隊列兰粉,也是一個分布式流處理平臺研儒。
kafka中文網(wǎng)
kafka官網(wǎng)
1.kafka基礎概念
Producer:Producer即生產者,消息的產生者谒兄,是消息的入口摔桦。
kafka cluster:
Broker:Broker是kafka實例,每個服務器上有一個或多個kafka的實例承疲,姑且認為每個broker對應一臺服務器邻耕。一個集群由多個broker組成鸥咖,集群內的broker都有一個不重復的編號,如圖中的broker-0兄世、broker-1等……
Topic:消息的主題啼辣,可以理解為消息的分類,kafka的數(shù)據(jù)就保存在topic碘饼。在每個broker上都可以創(chuàng)建多個topic熙兔。
Partition:Topic的分區(qū),每個topic可以有多個分區(qū)艾恼,分區(qū)的作用是做負載住涉,提高kafka的吞吐量。同一個topic在不同的分區(qū)的數(shù)據(jù)是不重復的
钠绍,partition的表現(xiàn)形式就是一個一個的文件夾舆声!
Replication:每一個分區(qū)都有多個副本
,副本的作用是做備胎柳爽。當主分區(qū)(Leader)故障的時候會選擇一個備胎(Follower)上位媳握,成為Leader。在kafka中默認副本的最大數(shù)量是10個磷脯,且副本的數(shù)量不能大于Broker的數(shù)量蛾找,follower和leader絕對是在不同的機器,同一機器對同一個分區(qū)也只可能存放一個副本(包括自己)赵誓。
Message:每一條發(fā)送的消息主體打毛。
Consumer:消費者,即消息的消費方俩功,是消息的出口幻枉。
Consumer Group:將多個消費組成一個消費者組。在kafka的設計中同一個分區(qū)的數(shù)據(jù)只能被同一消費者組中的某一個消費者消費
诡蜓。Partition 的分配問題熬甫,即確定哪個 Partition 由哪個 Consumer 來消費。Kafka 有兩種分配策略蔓罚,一個是 RoundRobin椿肩,一個是 Range,默認為Range豺谈。
一個消費者組內也可以訂閱多個topic
多個消費組可以訂閱同一個topic
覆旱。
2個 Consumer Group A, B訂閱了topicA核无。topicA,有4個partition(p0藕坯,p1团南,p2噪沙,p3)。Consumer Group A有2個Consumer:c0吐根、c1正歼,Consumer Group B有4個Consumer:c3,c4,c5,c6。經過分區(qū)分配后拷橘,consumer與partition的訂閱關系如下:
(1)TopicA 的4個partition在Consumer Group A中的分配情況如下:
C1 訂閱p0,p3
C2 訂閱p1,p2
(2)TopicA 的4個partition在Consumer Group B中的分配情況如下:
C3 訂閱p0
C4 訂閱p3
C5 訂閱p1
C6 訂閱p2
Zookeeper:kafka集群依賴zookeeper來保存集群的的元信息局义,來保證系統(tǒng)的可用性。
2.安裝Kafka
使用brew進行安裝冗疮,非常方便萄唇。
brew install kafka
kafka的安裝目錄:/usr/local/Cellar/kafka
kafka的配置文件目錄:/usr/local/etc/kafka
如果需要修改配置,可以進入對應目錄术幔,修改配置文件就好
3.小試牛刀
(3.1)啟動zookeeper
ZooKeeper是一個分布式的另萤,開放源碼的分布式應用程序協(xié)調服務
,是Google的Chubby一個開源的實現(xiàn)诅挑,是Hadoop和Hbase的重要組件四敞。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護拔妥、域名服務忿危、分布式同步、組服務等没龙。
kafka是基于zookeeper的铺厨,啟動kafka之前,需要先啟動zookeeper
/usr/local/Cellar/kafka/2.1.0/bin/zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
查看啟動是否成功
ps aux | grep zookeeper
啟動kafka
/usr/local/Cellar/kafka/2.1.0/bin/kafka-server-start /usr/local/etc/kafka/server.properties
查看啟動是否成功
ps aux | grep kafka
(3.2)創(chuàng)建一個topic
kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic sunday
查看topic列表
kafka-topics --list --zookeeper localhost:2181
(3.3)創(chuàng)建一個生產者
新起一個終端兜畸,作為生產者努释,用于發(fā)送消息,每一行算一條消息咬摇,將消息發(fā)送到kafka服務器
kafka-console-producer --broker-list localhost:9092 --topic sunday
(3.4)創(chuàng)建一個消費者
新起一個終端作為消費者伐蒂,接收消息
kafka-console-consumer --bootstrap-server localhost:9092 --topic sunday --from-beginning
(3.5)服務的關閉
服務關閉的順序是先kafka,然后zookeeper
# 關閉kafka
/usr/local/Cellar/kafka/2.1.0/bin/kafka-server-stop
#關閉zookeeper
/usr/local/Cellar/kafka/2.1.0/bin/zookeeper-server-stop