轉自:ImportNew 一文了解Kafka
功能:
解耦
緩存:緩衝
削峯限流(靈活性與峯值處理能力)
可恢復性
異步通信
主要概念:
borker:topic、message、partition、segment、log&index、replication(leader & follower)
broker:一個Kafka服務,ip:port
topic:邏輯概念,主題,相當於一張數據庫表。message:消息,相當於表中的一條記錄
partition:物理概念,分區,一張邏輯表實際存儲時分爲多個分區來存儲。
1個partition對應文件系統中的1個文件夾,名字爲topic名+partition序號。
segment:物理概念,段,每個分區分爲多個segment。
1個segment對應文件系統中的2個文件.log和.index文件。
文件名爲segment中最小索引的offset值。
.log文件存儲message的實際內容,.index文件存儲每個message的offset和其數據在.log文件中的偏移量。如果要去消費offset爲3的數據,首先通過二分法查找數據在哪個.index文件中,然後在.index文件中查找其數據在.log文件中的偏移量
producer:一段代碼,生產消息,指定topic後向broker發送消息。
consumer:一段代碼,消費特定topic下的消息。
發佈/訂閱模式:
一條消息可以被多個消費者組消費。但是對於同一個消費者組的消費者來說,一條消息只能被組內的一個消費消費;
消費者組:分佈式環境下,一段消費者代碼部署到了多個服務器上,每個服務上的這段代碼都是一個消費者,形成了消費者組。 在業務邏輯上,一條消息也只允許被其中的一個消費者消費。
不同的消費者代碼,對同一條消息的業務處理邏輯不同,因此多個不同的消費者組,可以對同一條消息進行消費。
技術實現:對每個消費者組,記錄其在每個partition上的消費的offset,offset只能加,不能回退。
可靠性和一致性的技術實現:
可靠性通過ACK實現:
partition收到數據後,向生產者發送ACK,如果生產者收到ACK就進行下一輪的發送,否則重新發送。
發送ACK的時機: