kafka框架:
高吞吐量分布式的訊息發布和訂閱系統,提供乙個分布式的,可劃分的,冗餘備份的永續性的日誌服務。主要用於處理活躍的流式資料。
在大資料系統中,經常碰到乙個問題,整個大資料是由各個子系統組成,且資料需要在各個子系統中高效能,低延時的不停流轉。這時候kafka相當於起到了整個大資料系統的資料匯流排的作用,它提供了固定的介面,有效降低系統組網的複雜度,避免各個子系統之間相互協調介面。
1、同時為發布和訂閱提供高吞吐量。據了解,kafka每秒可以生產約25萬訊息(50 mb),每秒處理55萬訊息(110 mb)。
2、可進行持久化操作。將訊息持久化到磁碟,因此可用於批量消費,例如etl,以及實時應用程式。通過將資料持久化到硬碟以及replication防止資料丟失。
3、分布式系統,易於向外擴充套件。所有的producer、broker和consumer都會有多個,均為分布式的。無需停機即可擴充套件機器。
4、訊息被處理的狀態是在consumer端維護,而不是由server端維護。當失敗時能自動平衡。
5、支援online和offline的場景。
kafka的整體架構非常簡單,是顯式分布式架構,producer、broker(kafka)和consumer都可以有多個。producer,consumer實現kafka註冊的介面,資料從producer傳送到broker,broker承擔乙個中間快取和分發的作用。broker分發註冊到系統中的consumer。broker的作用類似於快取,即活躍的資料和離線處理系統之間的快取。客戶端和伺服器端的通訊,是基於簡單,高效能,且與程式語言無關的tcp協議。
幾個基本概念:
1、topic:特指kafka處理的訊息源(feeds of messages)的不同分類。
2、partition:topic物理上的分組,乙個topic可以分為多個partition,每個partition是乙個有序的佇列。partition中的每條訊息都會被分配乙個有序的id(offset)。
3、message:訊息,是通訊的基本單位,每個producer可以向乙個topic(主題)發布一些訊息。
4、producers:訊息和資料生產者,向kafka的乙個topic發布訊息的過程叫做producers。
5、consumers:訊息和資料消費者,訂閱topics並處理其發布的訊息的過程叫做consumers。
6、broker:快取**,kafka集群中的一台或多台伺服器統稱為broker。
producer根據指定的partition方法(round-robin、hash等),將訊息發布到指定topic的partition裡面。
kafka集群接收到producer發過來的訊息後,將其持久化到硬碟,並保留訊息指定時長(可配置),而不關注訊息是否被消費。
consumer從kafka集**ull資料,並控制獲取訊息的offset。
吞吐量高吞吐量是kafka需要實現的核心目標之一
1、資料在磁碟上進行持久化:訊息不在記憶體中cache,直接寫入到磁碟,充分利用磁碟的順序讀寫效能
2、zero-copy(零拷貝),減少io
3、資料批量傳送
4、資料壓縮
5、topic劃分為多個partition,提高parallelism
負載均衡
1、producer根據使用者指定的演算法,將訊息傳送到指定的partition
2、存在多個partiiton,每個partition有自己的replica,每個replica分布在不同的broker節點上
3、多個partition需要選取出lead partition,lead partition負責讀寫,並由zookeeper負責fail over
4、通過zookeeper管理broker與consumer的動態加入與離開
拉取系統
由於kafka broker會持久化資料,broker沒有記憶體壓力,因此,consumer非常適合採取pull的方式消費資料,具有以下幾點好處:
1、簡化kafka的設計
2、consumer根據消費能力自主控制訊息拉取速度
3、consumer根據自身情況自主選擇消費模式,比如批量,重複消費,從尾端開始消費等
可擴充套件性
當需要增加broker結點時,新增的broker會向zookeeper註冊,而producer及consumer會根據註冊在zookeeper上的watcher感知這些變化,並及時作出調整。
TensorFlow輸入資料處理框架
如圖,大致為輸入資料處理流程示意圖。輸入資料處理第一步為獲取儲存訓練資料的檔案列表,在該圖中檔案列表為。通過tf.train.string input producer函式可以選擇性將檔案順序打亂,並加入輸入佇列。tf.train.string input producer函式會生成並維護乙個輸入檔...
Tensorflow 多執行緒資料處理框架
一 佇列與多執行緒 佇列是多執行緒資料處理框架的基礎,修改佇列狀態的主要操作有enqueue enqueuemany和dequeue 以下程式展示了fifoqueue佇列的基本操作 import tensorflow as tf 建立乙個先進先出的佇列,指定佇列中最多儲存兩個元素,並指定型別為整型 ...
資料處理 流資料處理利器
流處理 stream processing 是一種計算機程式設計正規化,其允許給定乙個資料序列 流處理資料來源 一系列資料操作 函式 被應用到流中的每個元素。同時流處理工具可以顯著提高程式設計師的開發效率,允許他們編寫有效 乾淨和簡潔的 流資料處理在我們的日常工作中非常常見,舉個例子,我們在業務開發...