Kafka 的一些知識點整理【1】

First: Kafka 是什麼?java

Kafka 是一個發佈訂閱系統 最初是是LinkedIn 開發 最後交給Apache 開源組織 github地址:https://github.com/apache/kafka   是用java 和Scala 去開發的~mysql

Kafka 如今主要用於 消息隊列使用git

Kafka 是一個快速 可擴展 內在就是分佈式的系統  github

分佈式: Kafka 提供集羣服務 Kafka cluster 能夠由一個或者多個Broker 組成  每一個Broker 提供對客戶端的服務  redis

分區: 每一類消息 或者叫訂閱主體 topic  能夠有不少分區 Partition sql

複製:一個topic 的分區有多個副本,按照必定的規則分佈在broker集羣中,副本可分爲leader和follow,leader所在broker負責響應客戶端的讀寫請求,follow週期性地同步leader數據,已防止leader故障後消息丟失apache

 常見的術語有哪些服務器

Broker :架構

Kafka集羣包含一個或多個服務器,這種服務器被稱爲broker。broker端不維護數據的消費狀態,提高了性能。直接使用磁盤進行存儲,線性讀寫,速度快:避免了數據在JVM內存和系統內存之間的複製,減小耗性能的建立對象和垃圾回收分佈式

Topic && Partition :

Topic  是指消息發送的服務器的類別 消費着用此類別去訂閱消息   好比我訂閱的是蘇州日報 仍是人民日報等此意思,topic 可存在於一個或者多個broker 中  消費者 不用關心 存儲在那個broker 中  就像 咱們網上買東西 咱們不關心 這個東西存在那個物流倉庫裏面  反正會有快遞員 給我送過來~  

每一個topic 會有存一個或者多個Partition 中  每一個Partition 都能保證有序    Partition 物理地址中 對應的是一個文件夾 文件夾中 這個目錄下有兩類文件,一類是以log爲後綴的文件,另外一類是以index爲後綴的文件 每個log文件和一個index文件相對應,這一對文件就是一個Segment File,其中的log文件就是數據文件,裏面存放的就是Message,而index文件是索引文件。Index文件記錄了元數據信息,指向對應的數據文件中Message的物理偏移量。

Partition  的存在 線性的提升的kafka的吞吐效率

Topic 是一個邏輯概念 最終真正的物理實現是partition   當建立topic 的時候會指定partition的數量  數量越大 其吞吐能力越強 可是也越消耗資源

Producer:  

發佈消息到Kafka Broke

Consumer && Consumer Group:

Consumer:消息的消費者,從Kafka Broker中拉取消息的客戶端

每一個Consumer屬於一個特定的Consumer Group(可爲每一個Consumer指定group name,若不指定group name則屬於默認的group)

每一個Partition 只會被Consumer Group中的一個Consumer 順序消費      每一個Consumer Group 中的一個Consumer 會消費一個或者多個Partition

因此設置topic 中的Pattition 的數量要根據 Consumer Group 中的consumer 作參考  通常是相等   若是Consumer group 的數量大於訂閱的topic 中的partition 數量多致使 其中一個consumer 無法消費數據 

Offset

保存位置: 在老版本中offset保存在zk中,而在新版本中offset保存在kafka本身的一個名爲consumer_offsets的topic中.

爲了防止consumer在處理消息過程當中,出現消息丟失的狀況,也能夠由consumer將offset保存到第三方庫中,由consumer本身維護,好比redis,mysql中.

惟一標識 :offset以groupid,topic,partition組成的三元組來惟一區分不一樣的partition分區的偏移量.

Replica

副本,Kafka中同一條消息拷貝到多個地方作數據冗餘,這些地方就是副本,副本分爲Leader和Follower,角色不一樣做用不一樣,副本是對Partition而言的,每一個分區可配置多個副原本實現高可用

Record

消息,Kafka處理的對象

 

Second:Kafka 有什麼特色

1:持久化  消息存儲在磁盤中   爲何存在磁盤中還能這麼快  後面進階慢慢去分析 得益於他的文件存儲結構

2:高吞吐  因爲每一個topic 能夠分別存儲於每一個partition 中  能夠橫向擴展 線性的提升了Kafka 的吞吐量  

3:分佈式  kafka 能夠有一個或者多個Broker 原本就是一個分佈式的架構系統   可快速的去平滑擴展

4:實時性   因爲消息持久化,使kafka能夠支持離線; 實時性使kafka又能夠支持在線,可用於一些流計算 

End: Kafka  用於哪些場景

正是因爲具備實時性的特色

常見的架構組合:Flume+Kafka+Storm/Spark streaming +Hbase/Hive

(1) 用來做爲實時傳輸數據的管道;

Flume+Kafka+Hdfs 搭建實時日誌收集系統

(2) 用來構建實時處理數據流的程序或應用;

Flume+Kafka+Storm/Spark streaming :搭建流數據處理系統

 

下篇:

1: 消費位置offset 怎麼去維護存儲的

2:Kafka 文件存儲機制 怎麼去存儲 怎麼去查詢

3:kafka 中zk 是怎麼工做的?

 

問題分析:

1:Kafka全局消費的有序性

2:kafka的數據重複消費怎麼處理

3:如何保證kafka中數據不丟失?

4:Kafka 爲何這麼快

參考:https://juejin.im/post/5cd2db8951882530b11ee976 

 

參考文獻以下:

https://www.jianshu.com/p/a64085ba336f

相關文章
相關標籤/搜索