kafka消息存儲
『壹』 rabbitmq和kafka的區別
RabbitMQ和Kafka的主要區別如下:
1、消息協議:RabbitMQ使用AMQP(高級消息隊列協議),而Kafka使用其自定義的協議。AMQP是一種標准協議,可以提供更強的互操作性,但Kafka的自定義協議可能具有更高的性能。
2、消息格式:RabbitMQ支持多種消息格式,如JSON、XML等,而Kafka只支持二進制格式。這使得RabbitMQ在處理復雜消息時更為靈活。
3、息持久性:RabbitMQ支持消息的持久化,可以將消息存儲在磁碟上,以確保消息不會在伺服器崩潰時丟失。而Kafka也支持消息的持久化,但它的設計目標是為了實現高吞吐量,因此可能會犧牲一些持久化性能。
4、消息傳遞:消息隊列系統可以確保消息在發送和接收之間可靠地傳遞,並處理任何傳輸錯誤或丟失。
5、消息處理:應用程序可以讀取消息並處理它,以便進行後續操作。
『貳』 Kafka 入門--數據日誌、副本機制和消費策略
一、Kafka 數據日誌
數據日誌是 Kafka 的核心組件之一,它以主題(Topic)為單位存儲消息。每個主題下包含一個或多個分區(Partition),而每個分區對應一個物理文件夾,用於存儲該分區的所有消息。
每個消息在被添加到分區時,都會帶有唯一的偏移量(offset),以此確保消息在分區內的順序性。然而,不同分區之間消息的順序性則不被保證。
日誌文件由多個段(Segment)組成,每個段由數據文件(.log)和索引文件(.index)組成。索引文件以稀疏存儲方式,只記錄每條消息的偏移量和內容,避免了大量索引佔用過多空間。
二、Kafka 副本機制
副本機制是 Kafka 保證數據可靠性的關鍵。每個分區有多個副本,其中只有一個為 leader,負責讀寫操作,其餘為 follower,僅用於備份。當 leader 出現故障,由 follower 中選舉新 leader。
使用單一 leader 提高一致性,避免多個副本同時讀寫導致的數據不一致問題。leader 通過 commit 策略通知 procer 數據已成功接收,即使在 leader 故障時,follower 中的數據仍然有效。
三、Kafka 消費策略
消費組(Consumer Group)由多個消費者組成,共同消費主題中的所有分區。每個消費者的偏移量(offset)記錄消費位置,用於追蹤消費進度。
消費策略包括 RangeAssignor、RoundRobinAssignor 和 StickyAssignor。RangeAssignor 均勻分配分區給消費者;RoundRobinAssignor 通過輪詢方式分配;StickyAssignor 力求分配與上一次一致,保持分配的「粘性」。
總結,Kafka 通過數據日誌、副本機制和靈活的消費策略,確保了高可用性、數據一致性和高效消費,使其成為分布式系統中可靠的事件存儲和傳輸解決方案。