alpakka-kafka(5)-kafka集群配置與分布式應用部署


在進入具體的kafka應用設計之前我們先把kafka集群環境配置介紹一下。多節點kafka-cluster的安裝、配置非常簡單,所以應該不用太多篇幅就可以完成一個完整可用的kafka-cluster環境了:

1、安裝Kafka之前需要安裝zookeeper。無論zookeeper或者kafka,安裝步驟都很簡單,直接按照官方的安裝指引一步步進行就行了,我們把注意力還是放在它們的具體配置上吧。

2、kafka的配置集中在server.properties文件里的幾個設置上:

      1)broker.id=2    

           本kafka實例在多節點集群中的唯一編號為2

      2)listeners=PLAINTEXT://130.90.27.123:9092,130.90.27.233:9092

         kafka實例監聽端口

      3)log.dirs=/usr/local/var/lib/kafka-logs

        kafka日志文件路徑

      4)zookeeper.connect=130.90.27.123:2181,130.90.27.233:2181

         zookeeper集群節點端口清單。kafka是自然集群模式的。只要配置文件中zookeeper.connect指向同一個zookeeper集群,代表所有kafka節點都屬於同一個kafka集群

3、zookeeper主要的功能是對kafka集群成員的控制管理。為了實現系統的安全和高可用性,zookeeper是一個仲裁模式的集群體系,為了實現多數裁定,zookeeper集群的節點數目必須是單數的。3-5個節點比較正常。

      zookeeper配置文件zookeeper.properties里設置舉例如下:

假如server.1,server.2,server.3分別為同一個zookeeper-cluster里的節點

server.1

dataDir=/var/lib/zookeeper
clientPort=2181
maxClientCnxns=0
initLimit=5
syncLimit=2
tickTime=2000
# list of servers
server.1=0.0.0.0:2888:3888
server.2=<Ip of second server>:2888:3888
server.3=<ip of third server>:2888:3888

server.2

dataDir=/var/lib/zookeeper
clientPort=2181
maxClientCnxns=0
initLimit=5
syncLimit=2
tickTime=2000
# list of servers
server.1=<ip of first server>:3888
server.2=0.0.0.0:2888:3888
server.3=<ip of third server>:2888:3888

server.3

dataDir=/var/lib/zookeeper
clientPort=2181
maxClientCnxns=0
initLimit=5
syncLimit=2
tickTime=2000
# list of servers
server.1=<ip of first server>:3888
server.2=<ip of second server>:3888
server.3=0.0.0.0:2888:3888

kafka適合在大型集成應用系統中使用。一個分布式應用系統可能包括了多個底層集群系統,包括數據庫、搜索引擎、分布式消息隊列、數據流集群等等。如何通過有效部署實現這些集群系統的集成也是一個值得考慮的問題。講到系統集成,首先想到的是http協議。http可以說是一種異類系統集成協議,是一種行業標准。拿一個大型應用軟件操作做例子,前端一般負責兩塊功能:

1、連接后台業務邏輯系統進行業務互動。一般來講后台業務決策是基於處理過的數據支持的

2、輸入商品及交易數據,這實際上是一個數據采集、過濾、加工處理的全過程。舉例:錄入一條交易數據、寫入數據庫、寫入搜索引擎索引、更新庫存數等等 ... 整個過程涉及到上面提到的幾個集群系統。如下圖:

從上面這個圖示可以看到:前端應用(app)主要是通過http分別與幾個集群系統對接的。也就是說app需要逐個通過http調用各系統api來實現特定的數據錄入。圖示中的系統如下:

1、elastic-services: 搜索引擎服務平台

2、mongodb-services: 數據庫服務平台

3、mongo-cluster: 數據庫集群節點連接

4、kafka-services: 消息發布平台

5、kafka-backend: 消息消費及數據處理平台

6、kafka-cluster: 消息隊列集群節點連接

7、distributed-backend: 應用系統業務互動平台

http方式系統集成的特點是目標系統之間耦合非常松散,實現了自由系統部署。最明顯的是各系統的客戶端可以分別部署,互不相關。假如上面這個app是個第三方軟件,比如是一個與其它企業數據交換的前端系統,那么這種http方式就非常適用。任何第三方系統,只要遵照協定的方式和數據格式就可以成為系統的一個集成部分。

但是,從大型系統數據安全的角度考慮:對企業內部系統來說,http集成方式存在諸多短板和風險。從下面幾個方面考慮:

1、負載均衡:http接入節點必須提供所有用戶的服務請求。超載會造成數據遺失

2、數據安全:任何一個集群系統http接入節點出現故障都會造成整體數據的不完整

從數據錄入來說,整個流程的完結在成功的寫入數據庫,也就是說:一旦數據存入數據庫就代表該數據已經成功完成了所有相關處理,包括:寫入搜索索引、完成數據處理如庫存數更新等等。如果按http方式逐個調用api服務的話,任何環節出現問題都會造成數據的不完整。所以,更穩妥的做法應該是寫入數據庫和其它相關數據處理環節都在同一個節點完成。也就是說在一個包含數據庫客戶端的節點上應該部署所有相關集群系統的客戶端。這樣,只要節點運行正常,能寫入數據庫,就能保證完成相關數據處理的所有環節。從這個思路出發,可以得出下面的集群系統部署圖示:

 

 

 按圖所示,整個數據錄入流程只需要調用一個http服務。數據保存到數據處理等所有環節都包含在同一項服務里(在backend自動實現)。如此實現相關數據處理環節與數據庫寫入同步:能寫入數據庫代表節點運行正常,也就是說其它環節也同樣能順利完成。反之如節點系統發生異常,寫入數據庫及其它相關環節都同時無法完成,可以保證整體數據的完整性。

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM