1 Kafka
-
Kafka是一個分布式流式數據平臺,它具有三個關鍵特性
- Message System: Pub-Sub消息系統
- Availability & Reliability:以容錯及持久化的方式存儲數據記錄流
- Scalable & Real time
1.1 Kafka架構體系
- Kafka系統中存在5個關鍵組件
- Producer
- Consume
- Kafka Cluster
- Broker:Kafka Server,或Kafka Node
- Zookeeper: 集群狀態存儲
- Connector:連接應用程序和Topic
- Stream Processor:流處理器,從一個Topic接收并處理流式數據,并將結果存入另一個Topic
- 還有兩個重要邏輯組件
- Topic
- Partition
1.2 Topic和Partition
-
關于Topic和Partition
-
Topic分類的消息流,相關的消息保存于Partition中
- 一個Topic中的數據,可以分布保存于一至多個Partition中
- 每個Partition中,通常存在一個leader,以及一至多個replicas/followers
-
Topic是Producer發布消息,以及consumer消費消息使用的端點
-
1.3 Topic中的消息記錄
- 消息及存儲方式
- Kafka中,每個消息記錄(record)的標準格式通常由key、value、timestamp和一些metadata組成;
- 待存入Topic的消息記錄未明確指定目標Partition時,Kafka會根據記錄的key的hash碼選擇一個Partition;未明確指定timestamp時,Producer將會使用當前時間(創建時間或附加到日志的時間)作為其時間戳;
- Kafka將數據持久存儲在log.dir參數指定 的目錄中,而各topic會映射進該目錄的子目錄中;
- Kafka會保留所有記錄,無論它們是否已被消費
- 記錄在broker配置中定義的retention period內保留,默認時長為7天(168小時)
- Kafka基于Pub/Sub和Queue模型構建Topic,它使用消費者組(Consumer Group)的概念將處理任務劃分為一組消費者進程并行運行,并且可以將消息廣播到多個組中;
1.4 Partition
-
Partition代表Topic中的數據分片,在其它數據庫系統中,通常稱為replica或shard
- 每個Partition都是一個按時間排序的不可變記錄序列,該序列存儲于日志中;
- 消費者按照記錄在日志中的存儲順序讀取消息;
- 每個消息都有一個稱為offset的id
-
能夠將一個Topic中的數據并行存儲于多個broker上;
-
支持以冗余機制(復制因子大于1)存儲多個副本,并能容忍最多N-1個服務器故障,N為復制
因子數量;
-
消費者讀取一個Topic時,它將從所有Partition中讀取數據