kafka消息队列-笔记
1? 什么是消息
????????在應用系統之間,傳遞的數據,叫做消息;
2? 常見消息隊列
- 標準的消息隊列實現:
????????主要基于pub/sub publish 、subscribe發布與訂閱模型
????????RabbitMQ:rabbit message queue
????????ActiveMQ:支持消息隊列當中事務處理
????????RocketMQ:阿里開源的消息隊列rocket
- 非標準的消息隊列的實現
????????消息隊列模型:主要是基于push、poll 推送與拉取
????????kafka不是標準的消息隊列的實現
????????kafka:吞吐量非常高,而且消息處理速度非常快
3? 消息隊列的應用場景
????????應用解耦:應用系統之間需要解耦合比較好
????????異步并行處理
????????限流削峰
????????消息驅動的系統:如12306
4? 消息系統的兩種模式
????????點對點:兩個人之間互相通信,都是點對點這種模型
????????發布與訂閱:群聊
5? 關于kafka
????????使用scala語言編寫,kafka是一個分布式、分區的,多副本的,多訂閱者的消息隊列系統,
分布式是由多個節點組成,一個節點就是一個服務器在kafka當中節點叫做broker,一個節點就是一個broker,一個broker就是一個服務器,磁盤順序讀寫
5.1? kafka應用場景:
????????流式處理:實時處理,數據從出現到產生,在一秒鐘以內能夠處理完成
????????流式計算:程序一旦啟動,就會一直運行下去,一旦有數據,就能夠馬上被處理掉
????????生產者生產數據到kafka里面去,然后通過一些實時處理的框架例如storm或sparkstreaming或者flink等等實時處理的框架去處理kafka里面的數據
5.2? kafka的基本架構
- 生產者:producer主要負責生產數據到topic里面去
- topic:虛擬的概念,某一類消息的主題,某一類消息都是存放在某一個topic當中
- 一個topic有多個partition:一個partition里面有多個segment段,每個segment默認1GB
- 一個segment:一個.index文件 + 一個.log文件
- .log:存放用戶真實的產生的數據
- .index:存放的是.log文件的索引數據
- 消費者:consumer,主要就是消費topic里面的數據
- consumer消費到哪一條數據需要進行記錄:offset來進行記錄,數據的偏移量,每條數據都有唯一的
-
kafka當中數據消費的時候,消費者都需要指定屬于哪一個消費組。任意時刻,一個分區里面的數據,只能被一個消費組里面的一個線程進行消費,如果調大分區的個數,可以增加分區數據的并行消費的粒度
-
partition的個數與線程的個數:
partition個數=線程的個數,剛剛好,一個線程消費一個分區;
partition個數>線程的個數,有線程需要去消費多個分區里面的數據
partition<線程的個數,有線程閑置
5.3? kafka與zookeeper的關系
????????kafka需要依賴zk保存一些節點信息,kafka緊耦合zookeeper
5.4??kafka當中的數據消費出現延遲
????????加大消費者線程數量,加大分區的個數
5.5??kafka當中副本的策略
????????使用isr這種策略來維護一個副本列表
????????is synchronize replication:同步完成的副本列表
????????主分區:可以有多個副本,為了最大程度的同步完成數據,使用多個副本,每個副本都啟動線程去復制主分區的數據,盡量保證副本當中的數據與主分區當中的數據一致
????????如果副本分區當中的數據與主分區當中的數據差別太大,將副本分區移除ISR列表;
????????如果副本分區的心跳時間比較久遠,也會將副本分區移除ISR列表。
總結
以上是生活随笔為你收集整理的kafka消息队列-笔记的全部內容,希望文章能夠幫你解決所遇到的問題。