剛接觸一些Apache Kafka的内容,用了兩天時間研究了一下,僅以此文做相關記錄,以供學習交流。
概念:
kafka依賴的項:
1. 硬體上,kafka利用線性存儲來進行硬碟直接讀寫。
2. kafka沒有使用記憶體作為緩存。
3. 用zero-copy。
4. Gzip和Snappy壓縮,
5. kafka對事務處理比較弱,但是message分發上還是做了一定的政策來保證資料遞送的準确性的。
kafka關于存儲的幾個概念
1. Partition:同一個topic下可以設定多個partition,目的是為了提高并行處理的能力。可以将同一個topic下的message存儲到不同的paritition下。
2. Offset:kafka的存儲檔案都是按照offset.kafka來命名,用offset做名字的好處是友善查找。
在分布式方面:
1. broker的部署是沒有主從結構的,每個節點都是同等的,節點的增減和減少都不需要改變任何配置。
2. producer和consumer通過zookeeper去發現topic,并通過zookeeper來協調生産和消費的過程。
3. producer、consumer和broker均采用TCP連接配接,通信基于NIO實作。并且Producer和consumer能自動檢測broker的增加和減少。
克隆出三台虛拟機,我這三台虛拟機的ip分别為
192.168.128.129
192.168.128.132
192.168.128.133
在129這個伺服器上找到 kafka目錄/config/server.properties檔案,做如下修改
這裡隻用到了一個zookeeper,并部署到了129上,沒有用叢集,當然也可以部署到其他機器上。
132上的kafka配置
133上的kafka配置
在129上啟動zookeeper伺服器
啟動129,132,133上的kafka服務
在任意機器上建一個topic,因為有三個kafka服務,是以這裡replication-factor設為3
檢視topic,此時的leader kafka為129,repicas:叢集裡有三個kafka,Isr:正常使用的kafka
在133這台機器上開啟一個producer,往132這個kafka發消息
停掉132的kafka,再次檢視topics,此時可用的Isr為129和133,leader依然為129,因為129的kafka沒有被停過,是以沒有重新選舉leader
在129上開啟一個consumer
自此,發現停掉了132,依然能通過zookeeper從129和133的kafka上收到發往132的消息。
kafka叢集測試通過