Docker - 第十七章 | 安裝Kafka
在工作過程中,還有後面的Kafka
系列的研究文章,首先是要建立一個Kafka
環境,所以才產生了此篇。
這邊是使用Docker
的docker-compose
建立的環境,網路上和官方都是直接下載實際安裝檔在實體機器上做建置;詳細安裝過程可以上網搜尋即可。
Apache Kafka 概述
在大數據中,使用了大量的數據。關於數據,我們有兩個主要挑戰。第一個挑戰是如何收集大量的數據,第二個挑戰是分析收集的數據。為了克服這些挑戰,你必須需要一個消息系統。
Kafka
專為分佈式高吞吐量系統而設計。Kafka
往往工作得很好,作為一個更傳統的消息代理的替代品。與其他消息傳遞系統相比,Kafka
具有更好的吞吐量,內置分區,複製和固有的容錯能力,這使得它非常適合大規模消息處理應用程序。
Apache Kafka 集群架構
ZooKeeper
作為給分佈式系統提供協調服務的工具被kafka
所依賴。在分佈式系統中,消費者需要知道有哪些生產者是可用的,而如果每次消費者都需要和生產者建立連接並測試是否成功連接,那效率也太低了,顯然是不可取的。而通過使用ZooKeeper
協調服務,Kafka
就能將Producer
、Consumer
、Broker
等結合在一起,同時藉助ZooKeeper
、Kafka
就能夠將所有組件在無狀態的條件下建立起生產者和消費者的訂閱關係,實現負載均衡。
S.No | 組件和說明 |
---|---|
1 | Broker(代理)Kafka集群通常由多個代理組成以保持負載平衡。 Kafka代理是無狀態的,所以他們使用ZooKeeper來維護它們的集群狀態。一個Kafka代理實例可以每秒處理數十萬次讀取和寫入,每個Broker可以處理TB的消息,而沒有性能影響。 Kafka經紀人領導選舉可以由ZooKeeper完成。 |
2 | ZooKeeper ZooKeeper用於管理和協調Kafka代理。 ZooKeeper服務主要用於通知生產者和消費者Kafka系統中存在任何新代理或Kafka系統中代理失敗。根據Zookeeper接收到關於代理的存在或失敗的通知,然後生產者和消費者採取決定並開始與某些其他代理協調他們的任務。 |
3 | Producers(生產者)生產者將資料推送給經紀人。當新代理啟動時,所有生產者搜索它並自動向該新代理髮送消息。 Kafka生產者不等待來自代理的確認,並且發送消息的速度與代理可以處理的一樣快。 |
4 | Consumers(消費者)因為Kafka代理是無狀態的,這意味著消費者必須通過使用分區偏移來維護已經消耗了多少消息。如果消費者確認特定的消息偏移,則意味著消費者已經消費了所有先前的消息。消費者向代理髮出異步拉取請求,以具有準備好消耗的字節緩衝區。消費者可以簡單地通過提供偏移值來快退或跳到分區中的任何點。消費者偏移值由ZooKeeper通知。 |
取得 Kafka
這個docker-compose
文件將通過Docker
為你運行所有內容。
將其複製貼上到本地文件系統上名為docker-compose.yml
的文件中。
注:這邊所使用的Kafka service ports = 9091, listeners = localhost,可自行修改。
1 | version: '2' |
建立並背景執行 kafka 環境
從包含在上一步中創建的docker-compose.yml
文件的目錄中,運行此命令以按正確的順序啟動所有服務:
1 | $ docker-compose up -d |
成功啟動所有服務後,你將運行並可以使用基本的Kafka
環境。
建立 Topic
因為這邊有安裝confluentinc/cp-enterprise-control-center
,是kafka
的後台介面管理,可以透過介面查看、建立kafka
相關資訊。
1 | http://localhost:9021 |
進入controlcenter.cluster
,可以看到選單上有Topic
,點擊進去後,就可以Add Topic
停止 kafka 環境
因為有分停止、刪除⋯⋯等等,詳細指令可以參閱附註
附註
docker
和docker-compose
有很多相似之處,運作模式、參數也差不多,只是變成一次控制一群容器。常用指令如下:
用途 | 指令 | 常用可選參數 | 類似指令 |
---|---|---|---|
建立並前景執行容器 | docker-compose up | -d、-f | docker run |
查看容器運作 | docker-compose ps | -f | docker ps |
執行容器 | docker-compose start | -f | docker start |
停止容器 | docker-compose stop | -f | docker stop |
刪除容器 | docker-compose down | -f | docker rm |
印出log | docker-compose logs | -f | docker logs |
進入容器 | docker-compose exec |
-f | docker exec -it |
註:以上參考了
Apache Kafka 教程
Day 29- 三周目 - Docker Compose:一次管理多個容器
Kafka 入门(三)–为什么 Kafka 依赖 ZooKeeper?