centos7搭建kafka集群-第一篇


Kafka初識

1、Kafka使用背景

 

在我們大量使用分布式數據庫、分布式計算集群的時候,是否會遇到這樣的一些問題:
  1. 我們想分析下用戶行為(pageviews),以便我們設計出更好的廣告位
  2. 我想對用戶的搜索關鍵詞進行統計,分析出當前的流行趨勢
  3. 有些數據,存儲數據庫浪費,直接存儲硬盤效率又低 
這些場景都有一個共同點:
數據是由上游模塊產生,上游模塊,使用上游模塊的數據計算、統計、分析,這個時候就可以使用消息系統,尤其是分布式消息系統!
2、Kafka的定義
What is Kafka:它是一個分布式消息系統,由linkedin使用scala編寫,用作LinkedIn的活動流(Activity Stream)和運營數據處理管道(Pipeline)的基礎。具有高水平擴展和高吞吐量。
3、Kafka和其他主流分布式消息系統的對比 
定義解釋:
1、Java 和 scala都是運行在JVM上的語言。
2、erlang和最近比較火的和go語言一樣是從代碼級別就支持高並發的一種語言,所以RabbitMQ天生就有很高的並發性能,但是 有RabbitMQ嚴格按照AMQP進行實現,受到了很多限制。kafka的設計目標是高吞吐量,所以kafka自己設計了一套高性能但是不通用的協議,他也是仿照AMQP( Advanced Message Queuing Protocol   高級消息隊列協議)設計的。 
3、事物的概念:在數據庫中,多個操作一起提交,要么操作全部成功,要么全部失敗。舉個例子, 在轉賬的時候付款和收款,就是一個事物的例子,你給一個人轉賬,你轉成功,並且對方正常行收到款項后,這個操作才算成功,有一方失敗,那么這個操作就是失敗的。 
對應消在息隊列中,就是多條消息一起發送,要么全部成功,要么全部失敗。3個中只有ActiveMQ支持,這個是因為,RabbitMQ和Kafka為了更高的性能,而放棄了對事物的支持 。
4、集群:多台服務器組成的整體叫做集群,這個整體對生產者和消費者來說,是透明的。其實對消費系統組成的集群添加一台服務器減少一台服務器對生產者和消費者都是無感之的。
5、負載均衡,對消息系統來說負載均衡是大量的生產者和消費者向消息系統發出請求消息,系統必須均衡這些請求使得每一台服務器的請求達到平衡,而不是大量的請求,落到某一台或幾台,使得這幾台服務器高負荷或超負荷工作,嚴重情況下會停止服務或宕機。
6、動態擴容是很多公司要求的技術之一,不支持動態擴容就意味着停止服務,這對很多公司來說是不可以接受的。 
注:
阿里巴巴的Metal,RocketMQ都有Kafka的影子,他們要么改造了Kafka或者借鑒了Kafka,最后Kafka的動態擴容是通過Zookeeper來實現的。 
 
 
Zookeeper是一種在分布式系統中被廣泛用來作為:分布式狀態管理、分布式協調管理、分布式配置管理、和分布式鎖服務的集群。kafka增加和減少服務器都會在Zookeeper節點上觸發相應的事件kafka系統會捕獲這些事件,進行新一輪的負載均衡,客戶端也會捕獲這些事件來進行新一輪的處理。

Kafka相關概念

1、 AMQP協議

Advanced Message Queuing Protocol (高級消息隊列協議)
The Advanced Message Queuing Protocol (AMQP): 是一個標准開放的應用層的消息中間件(Message Oriented Middleware)協議。AMQP定義了通過網絡發送的字節流的數據格式。因此兼容性非常好,任何實現AMQP協議的程序都可以和與AMQP協議兼容的其他程序交互,可以很容易做到跨語言,跨平台。
 
上面說的3種比較流行的消息隊列協議,要么支持AMQP協議,要么借鑒了AMQP協議的思想進行了開發、實現、設計。
2、 一些基本的概念
1、消費者:(Consumer):從消息隊列中請求消息的客戶端應用程序
2、生產者:(Producer)  :向broker發布消息的應用程序
3、AMQP服務端(broker):用來接收生產者發送的消息並將這些消息路由給服務器中的隊列,便於fafka將生產者發送的消息,動態的添加到磁盤並給每一條消息一個偏移量,所以對於kafka一個broker就是一個應用程序的實例
kafka支持的客戶端語言:Kafka客戶端支持當前大部分主流語言,包括:C、C++、Erlang、Java、.net、perl、PHP、Python、Ruby、Go、Javascript
可以使用以上任何一種語言和kafka服務器進行通信(即辨析自己的consumer從kafka集群訂閱消息也可以自己寫producer程序) 
 
3、Kafka架構
生產者生產消息、kafka集群、消費者獲取消息這樣一種架構,如下圖:
kafka集群中的消息,是通過Topic(主題)來進行組織的,如下圖:
一些基本的概念:
1、主題(Topic):一個主題類似新聞中的體育、娛樂、教育等分類概念,在實際工程中通常一個業務一個主題。
2、分區(Partition):一個Topic中的消息數據按照多個分區組織,分區是kafka消息隊列組織的最小單位,一個分區可以看作是一個FIFO( First Input First Output的縮寫,先入先出隊列)的隊列。
kafka分區是提高kafka性能的關鍵所在,當你發現你的集群性能不高時,常用手段就是增加Topic的分區,分區里面的消息是按照從新到老的順序進行組織,消費者從隊列頭訂閱消息,生產者從隊列尾添加消息。
 
工作圖:
 
 
備份(Replication):為了保證分布式可靠性,kafka0.8開始對每個分區的數據進行備份(不同的Broker上),防止其中一個Broker宕機造成分區上的數據不可用。
kafka0.7以上是一個很大的改變:1、增加了備份2、增加了控制借點概念,增加了集群領導者選舉


免責聲明!

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



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