您好,登錄后才能下訂單哦!
通過Kafka的快速入門 https://www.cnblogs.com/tree1123/p/11150927.html
能了解到Kafka的基本部署,使用,但他和其他的消息中間件有什么不同呢?
Kafka的基本原理,術語,版本等等都是怎么樣的?到底什么是Kafka呢?
http://kafka.apache.org/intro
2011年,LinkIn開源, November 1, 2017 1.0版本發布 July 30, 2018 2.0版本發布
參考官網的圖:
Kafka?用于構建實時數據管道和流式應用程序。它具有水平可擴展性、容錯性、速度極快,并在數千家公司投入生產。
kafka官網最新的定義:Apache Kafka? is a distributed streaming platform
也就是分布式流式平臺。
介紹:
三個特點:
消息 持久化 流處理
兩類應用:
Building real-time streaming data pipelines that reliably get data between systems or applications
Building real-time streaming applications that transform or react to the streams of data
實時流數據管道 實時流應用程序
?
幾個概念
Kafka is run as a cluster on one or more servers that can span multiple datacenters.
The Kafka cluster stores streams of?records?in categories called?topics.
集群 topic record
?
四個核心api
?Producer API? Consumer API? Streams API Connector API
?
客戶端服務器通過tcp協議 支持多種語言
主題和日志
一個主題可以有零個,一個或多個消費者訂閱寫入它的數據
對于每個主題,Kafka群集都維護一個分區日志
每個分區都是一個有序的,不可變的記錄序列,不斷附加到結構化的提交日志中。
分區中的記錄每個都被分配一個稱為偏移的順序ID號,它唯一地標識分區中的每個記錄。
Kafka集群持久地保留所有已發布的記錄 - 無論它們是否已被消耗 - 使用可配置的保留期。可以配置這個時間。
Kafka的性能在數據大小方面實際上是恒定的,因此長時間存儲數據不是問題。
每個消費者保留的唯一元數據是該消費者在日志中的偏移或位置。
這種偏移由消費者控制:通常消費者在讀取記錄時會線性地提高其偏移量,但事實上,由于消費者控制位置,它可以按照自己喜歡的任何順序消費記錄。例如,消費者可以重置為較舊的偏移量以重新處理過去的數據,或者跳到最近的記錄并從“現在”開始消費。
這使得消費者特別容易使用。
生產者:
生產者將數據發布到他們選擇的主題。
為了負載均衡,可以選擇多個分區。
消費者:
消費者組
傳統的消息隊列 發布訂閱 都有弊端
隊列可以擴展但不是多用戶,發布訂閱每條消費發給每個消費者,無法擴展。
但是kafka這個模式 解決了這些問題
kafka確保使用者是該分區的唯一讀者并按順序使用數據,由于有許多分區,這仍然可以
平衡許多消費者實例的負載。
作為存儲系統
作為流處理系統
http://kafka.apache.org/uses
Kafka可以替代更傳統的消息代理。消息代理的使用有多種原因(將處理與數據生成器分離,緩沖未處理的消息等)。與大多數消息傳遞系統相比,Kafka具有更好的吞吐量,內置分區,復制和容錯功能,這使其成為大規模消息處理應用程序的理想解決方案。
根據我們的經驗,消息傳遞的使用通常相對較低,但可能需要較低的端到端延遲,并且通常取決于Kafka提供的強大的耐用性保證。
在這個領域,Kafka可與傳統的消息傳遞系統(如ActiveMQ或?RabbitMQ)相媲美。
站點活動(頁面查看,搜索或用戶可能采取的其他操作)發布到中心主題,每個活動類型包含一個主題。實時處理,實時監控以及加載到Hadoop或離線數據倉庫系統以進行離線處理和報告。
Kafka通常用于運營監控數據。
許多人使用Kafka作為日志聚合解決方案的替代品。日志聚合通常從服務器收集物理日志文件,并將它們放在中央位置(可能是文件服務器或HDFS)進行處理。Kafka抽象出文件的細節,并將日志或事件數據更清晰地抽象為消息流。
從0.10.0.0開始,這是一個輕量級但功能強大的流處理庫,名為Kafka Streams
http://kafka.apache.org/documentation/
簡介 使用 快速入門 都已經學習過了
生態:這里有一些kafka的生態,各種Connector?可以直接連接數據庫 es等等 還可以連接其他的流處理 還有各種管理工具
confluent公司 專門做kafka的生態
https://cwiki.apache.org/confluence/display/KAFKA/Ecosystem
kafka connect stream management
kafka考慮的幾個問題:
吞吐量: 用到了page cache 并不是硬盤讀寫
消息持久化: 這個還是靠他獨特的offset設計
負載均衡:分區副本機制
由于應用 零拷貝技術 客戶端應用epoll 所以kafka部署在linux上性能更高。
消息:kafka的消息由 key value timestamp組成 消息頭里定義了一些壓縮 版本號的信息
crc 版本號 屬性 時間戳 長度 key長度 key value長度 value
用的是二進制 不用java類
topic和partition:
這是kafka最核心,也是最重要的機制,這個機制讓他區別于其他。
offset是指某一個分區的偏移量。
topic partition offset 這三個唯一確定一條消息。
生產者的offset其實就是最新的offset。
消費者的offset是他自己維護的,他可以選擇分區最開始,最新,也可以記住他消費到哪了。
消費者數大于分區,就會有消費者空著。 消費者數小于分區,就會均衡消費。
因為kafka的設計是在一個partition上是不允許并發的,所以consumer數不要大于partition數 ,浪費。
如果consumer從多個partition讀到數據,不保證數據間的順序性,kafka只保證在一個partition上數據是有序的,但多個partition,根據你讀的順序會有不同。
增減consumer,broker,partition會導致rebalance,所以rebalance后consumer對應的partition會發生變化 。
消費者組是為了不同組的消費者可以同時消費一個分區的消息。
replica
這是為了防止服務器掛掉。
分為兩類 leader replica 和 follow replica
只有 leader replica會響應客戶端。
一旦leader replica所在的broker宕機,會選出新的leader。
kafka保證一個partition的多個replica一定不會分配到同一臺broker上。
follow與leader實時同步。
ISR
in-sync replica 與leader replica保持同步的replica集合
正常時,所有的replica都在ISR中,但如果響應太慢,就會踢出ISR。之后追上來再加進來。
ISR中至少有一個replica是活著的。
ISR中所有replica都收到消息,這個消息才是已提交狀態。
更多實時計算相關技術博文,歡迎關注實時流式計算
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。