kafka
消息記錄(record): 由一個key,一個value和一個時間戳構成,消息最終存儲在主題下的分區中, 記錄在生産者中稱為生産者記錄(ProducerRecord), 在消費者中稱為消費者記錄(ConsumerRecord),Kafka叢集保持所有的消息,直到它們過期, 無論消息是否被消費了,在一個可配置的時間段内,Kafka叢集保留所有釋出的消息,不管這些消息有沒有被消費。比如,如果消息的儲存政策被設定為2天,那麼在一個消息被釋出的兩天時間内,它都是可以被消費的。之後它将被丢棄以釋放空間。Kafka的性能是和資料量無關的常量級的,是以保留太多的資料并不是問題。
生産者(producer): 生産者用于釋出(send)消息
消費者(consumer): 消費者用于訂閱(subscribe)消息
消費者組(consumer group): 相同的group.id的消費者将視為同一個消費者組, 每個消費者都需要設定一個組id, 每條消息隻能被 consumer group 中的一個 Consumer 消費,但可以被多個 consumer group 消費
主題(topic): 消息的一種邏輯分組,用于對消息分門别類,每一類消息稱之為一個主題,相同主題的消息放在一個隊列中
分區(partition): 消息的一種實體分組, 一個主題被拆成多個分區,每一個分區就是一個順序的、不可變的消息隊列,并且可以持續添加,分區中的每個消息都被配置設定了一個唯一的id,稱之為偏移量(offset),在每個分區中偏移量都是唯一的。每個分區對應一個邏輯log,有多個segment組成。
偏移量(offset): 分區中的每個消息都一個一個唯一id,稱之為偏移量,它代表已經消費的位置。可以自動或者手動送出偏移量(即自動或者手動控制一條消息是否已經被成功消費)
代理(broker): 一台kafka伺服器稱之為一個broker
副本(replica):副本隻是一個分區(partition)的備份。 副本從不讀取或寫入資料。 它們用于防止資料丢失。
上司者(leader):Leader 是負責給定分區的所有讀取和寫入的節點。 每個分區都有一個伺服器充當Leader, producer 和 consumer 隻跟 leader 互動
追随者(follower):跟随上司者指令的節點被稱為Follower。 如果上司失敗,一個追随者将自動成為新的上司者。 跟随者作為正常消費者,拉取消息并更新其自己的資料存儲。replica 中的一個角色,從 leader 中複制資料。
zookeeper:Kafka代理是無狀态的,是以他們使用ZooKeeper來維護它們的叢集狀态。ZooKeeper用于管理和協調Kafka代理
kafka功能
釋出訂閱:生産者(producer)生産消息(資料流), 将消息發送到到kafka指定的主題隊列(topic)中,也可以發送到topic中的指定分區(partition)中,消費者(consumer)從kafka的指定隊列中擷取消息,然後來處理消息。
流處理(Stream Process): 将輸入topic轉換資料流到輸出topic
連接配接器(Connector) : 将資料從應用程式(源系統)中導入到kafka,或者從kafka導出資料到應用程式(宿主系統sink system), 例如:将檔案中的資料導入到kafka,從kafka中将資料導出到檔案中
kafka中的消息模型
隊列:同名的消費者組員瓜分消息
釋出訂閱:廣播消息給多個消費者組(不同名)
生産者(producer)将消息記錄(record)發送到kafka中的主題中(topic), 一個主題可以有多個分區(partition), 消息最終存儲在分區中,消費者(consumer)最終從主題的分區中擷取消息。
使用庫sarama 文檔: https://godoc.org/github.com/Shopify/sarama#example-Consumer