Kafka高可用環境搭建

Apache Kafka是分佈式發佈-訂閱消息系統,在 kafka官網上對 kafka 的定義:一個分佈式發佈-訂閱消息傳遞系統。 它最初由LinkedIn公司開發,Linkedin於2010年貢獻給了Apache基金會併成爲頂級開源項目。Kafka是一種快速、可擴展的、設計內在就是分佈式的,分區的和可複製的提交日誌服務。html

注意:Kafka並無遵循JMS規範,它只提供了發佈和訂閱通信方式!!!!!
kafka中文官網:http://kafka.apachecn.org/quickstart.htmlweb

 

Kafka用在日誌裏面比較多 大數據裏面的數據庫

MQ的思想: 解耦合  流量削峯  異步通訊apache

 

kafka優勢:緩存

- 高吞吐量、低延遲:kafka每秒能夠處理幾十萬條消息,它的延遲最低只有幾毫秒,每一個topic能夠分多個partition, consumer group 對partition進行consume操做,我以前在課題裏用到Spark Streaming 做爲消費者過濾數據。
- 可擴展性:kafka集羣支持熱擴展
- 持久性、可靠性:消息被持久化到本地磁盤,而且支持數據備份防止數據丟失
- 容錯性:容許集羣中節點失敗(若副本數量爲n,則容許n-1個節點失敗)
- 高併發:支持數千個客戶端同時讀寫服務器

 

Kafka依賴Zookeeper,kafka把集羣的節點信息 所有存放在Zookeeper節點!!!!!併發

 

應用場景:app

- 日誌收集:一個公司能夠用Kafka能夠收集各類服務的log,經過kafka以統一接口服務的方式開放給各類consumer,例如hadoop、Hbase、Solr或者Spark Streaming等。
- 消息系統:解耦和生產者和消費者、緩存消息等。
- 用戶活動跟蹤:Kafka常常被用來記錄web用戶或者app用戶的各類活動,如瀏覽網頁、搜索、點擊等活動,這些活動信息被各個服務器發佈到kafka的topic中,而後訂閱者經過訂閱這些topic來作實時的監控分析,或者裝載到hadoop、數據倉庫中作離線分析和挖掘。
- 運營指標:Kafka也常常用來記錄運營監控數據。包括收集各類分佈式應用的數據,生產各類操做的集中反饋,好比報警和報告。
- 流式處理:好比spark streaming和storm
- 事件源異步

 

關鍵名詞解釋:分佈式

 

Broker:Kafka節點,一個Kafka節點就是一個broker,多個broker能夠組成一個Kafka集羣。  broker就是節點,單機的kafka服務器
Topic:一類消息,消息存放的目錄即主題,例如page view日誌、click日誌等均可以以topic的形式存在,Kafka集羣可以同時負責多個topic的分發,kafka服務器存放 主題。kafka集羣至關於把topic進行拆分,拆分到不一樣的分區進行存放。相似於數據庫存放數據量比較大的狀況下,表進行拆分。查詢時候進行分表查詢

massage: Kafka中最基本的傳遞對象。
Partition:topic物理上的分組,一個topic能夠分爲多個partition,每一個partition是一個有序的隊列,就是分區的概念,至關於把topic存放到不一樣的物理機器上存儲起來。topic消息進行拆分,均攤存放到不一樣的

                  集羣中的kafka服務器上。 每一個partition實際上是有順序的。
Segment:partition物理上由多個segment組成,每一個Segment存着message信息
Producer : 生產者,生產message發送到topic
Consumer : 消費者,訂閱topic並消費message, consumer做爲一個線程來消費
Consumer Group:消費者組,一個Consumer Group包含多個consumer。在同一個組能夠收到消息
Offset:偏移量,理解爲消息partition中的索引便可。  消息在partition的索引的位置

 

須要理解存儲策略:

  

1)kafka以topic來進行消息管理,每一個topic包含多個partition,每一個partition對應一個邏輯log,有多個segment組成
2)每一個segment中存儲多條消息(見下圖),消息id由其邏輯位置決定,即從消息id可直接定位到消息的存儲位置,避免id到位置的額外映射。
3)每一個part在內存中對應一個index,記錄每一個segment中的第一條消息偏移。
4)發佈者發到某個topic的消息會被均勻的分佈到多個partition上(或根據用戶指定的路由規則進行分佈),broker收到發佈消息往對應partition的最後一個segment上添加該消息,當某個segment上的消息條數達到配置值或消息發佈時間超過閾值時,segment上的消息會被flush到磁盤,只有flush到磁盤上的消息訂閱者才能訂閱到,segment達到必定的大小後將不會再往該segment寫數據,broker會建立新的segment。

 

生產者發送消息原理:

 

 

 

 

 Kafka高可用集羣原理:

   

     kafka 是topic爲主的,kafka必須集羣,核心就是集羣,才能體現分區的優點!

     

     集羣環境下 生產者投遞消息 到哪一個Broker? 

     (Tomcat 經過Nginx 集合起來的思想深刻人心)

     集羣的目的就是分擔單臺的壓力,kafaka採用了 負載輪訓的機制

      數據庫裏面 單表 有1億條數據  查詢很慢的 。因此分表,好比按照月份進行分或者根據其餘的業務來進行分。

      

    下圖三個Broke  topic進行分區存放,在建立topic時候,輪訓去指定分區。BrokerId區分之

      0,1,2,34,5,6爲offset 每一個分區中的offset是獨立的,互不影響的

      三個broker,有三個消費者是比較合理的~

     Zookeeper 節點專門存放topic 信息。   kafka 的broker的信息存放在zk節點

相關文章
相關標籤/搜索