Kafka學(xué)習(xí)(二)-------- 什么是Kafka

通過Kafka的快速入門 https://www.cnblogs.com/tree1123/p/11150927.html

能了解到Kafka的基本部署,使用,但他和其他的消息中間件有什么不同呢?

Kafka的基本原理,術(shù)語,版本等等都是怎么樣的?到底什么是Kafka呢?

一、Kafka簡介

http://kafka.apache.org/intro

2011年,LinkIn開源, November 1, 2017 1.0版本發(fā)布 July 30, 2018 2.0版本發(fā)布

參考官網(wǎng)的圖:

home.png

Kafka?用于構(gòu)建實(shí)時(shí)數(shù)據(jù)管道和流式應(yīng)用程序。它具有水平可擴(kuò)展性、容錯性、速度極快,并在數(shù)千家公司投入生產(chǎn)。

kafka官網(wǎng)最新的定義:Apache Kafka? is a distributed streaming platform

也就是分布式流式平臺。

介紹:

三個(gè)特點(diǎn):

  • Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.

  • Store streams of records in a fault-tolerant durable way.

  • Process streams of records as they occur.

消息 持久化 流處理

兩類應(yīng)用:

  • 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

    實(shí)時(shí)流數(shù)據(jù)管道 實(shí)時(shí)流應(yīng)用程序

    ?

    幾個(gè)概念

    • 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.

    • Each record consists of a key, a value, and a timestamp

      集群 topic record

      ?

      四個(gè)核心api

      • The Producer API allows an application to publish a stream of records to one or more Kafka topics.

      • The Consumer API allows an application to subscribe to one or more topics and process the stream of records produced to them.

      • The Streams API allows an application to act as a stream processor, consuming an input stream from one or more topics and producing an output stream to one or more output topics, effectively transforming the input streams to output streams.

      • The Connector API allows building and running reusable producers or consumers that connect Kafka topics to existing applications or data systems. For example, a connector to a relational database might capture every change to a table.

      Producer API Consumer API Streams API Connector API

      ?

intr.png

客戶端服務(wù)器通過tcp協(xié)議 支持多種語言

主題和日志

一個(gè)主題可以有零個(gè),一個(gè)或多個(gè)消費(fèi)者訂閱寫入它的數(shù)據(jù)

對于每個(gè)主題,Kafka群集都維護(hù)一個(gè)分區(qū)日志

每個(gè)分區(qū)都是一個(gè)有序的,不可變的記錄序列,不斷附加到結(jié)構(gòu)化的提交日志中。

分區(qū)中的記錄每個(gè)都被分配一個(gè)稱為偏移的順序ID號,它唯一地標(biāo)識分區(qū)中的每個(gè)記錄。

topic1.png

Kafka集群持久地保留所有已發(fā)布的記錄 - 無論它們是否已被消耗 - 使用可配置的保留期??梢耘渲眠@個(gè)時(shí)間。

Kafka的性能在數(shù)據(jù)大小方面實(shí)際上是恒定的,因此長時(shí)間存儲數(shù)據(jù)不是問題。

topic2.png

每個(gè)消費(fèi)者保留的唯一元數(shù)據(jù)是該消費(fèi)者在日志中的偏移或位置。

這種偏移由消費(fèi)者控制:通常消費(fèi)者在讀取記錄時(shí)會線性地提高其偏移量,但事實(shí)上,由于消費(fèi)者控制位置,它可以按照自己喜歡的任何順序消費(fèi)記錄。例如,消費(fèi)者可以重置為較舊的偏移量以重新處理過去的數(shù)據(jù),或者跳到最近的記錄并從“現(xiàn)在”開始消費(fèi)。

這使得消費(fèi)者特別容易使用。

生產(chǎn)者:

生產(chǎn)者將數(shù)據(jù)發(fā)布到他們選擇的主題。

為了負(fù)載均衡,可以選擇多個(gè)分區(qū)。

消費(fèi)者:

消費(fèi)者組

group.png

傳統(tǒng)的消息隊(duì)列 發(fā)布訂閱 都有弊端

隊(duì)列可以擴(kuò)展但不是多用戶,發(fā)布訂閱每條消費(fèi)發(fā)給每個(gè)消費(fèi)者,無法擴(kuò)展。

但是kafka這個(gè)模式 解決了這些問題

kafka確保使用者是該分區(qū)的唯一讀者并按順序使用數(shù)據(jù),由于有許多分區(qū),這仍然可以

平衡許多消費(fèi)者實(shí)例的負(fù)載。

作為存儲系統(tǒng)

作為流處理系統(tǒng)

二、常見使用

http://kafka.apache.org/uses

消息

Kafka可以替代更傳統(tǒng)的消息代理。消息代理的使用有多種原因(將處理與數(shù)據(jù)生成器分離,緩沖未處理的消息等)。與大多數(shù)消息傳遞系統(tǒng)相比,Kafka具有更好的吞吐量,內(nèi)置分區(qū),復(fù)制和容錯功能,這使其成為大規(guī)模消息處理應(yīng)用程序的理想解決方案。

根據(jù)我們的經(jīng)驗(yàn),消息傳遞的使用通常相對較低,但可能需要較低的端到端延遲,并且通常取決于Kafka提供的強(qiáng)大的耐用性保證。

在這個(gè)領(lǐng)域,Kafka可與傳統(tǒng)的消息傳遞系統(tǒng)(如ActiveMQRabbitMQ)相媲美。

網(wǎng)站活動跟蹤

站點(diǎn)活動(頁面查看,搜索或用戶可能采取的其他操作)發(fā)布到中心主題,每個(gè)活動類型包含一個(gè)主題。實(shí)時(shí)處理,實(shí)時(shí)監(jiān)控以及加載到Hadoop或離線數(shù)據(jù)倉庫系統(tǒng)以進(jìn)行離線處理和報(bào)告。

度量

Kafka通常用于運(yùn)營監(jiān)控?cái)?shù)據(jù)。

日志聚合

許多人使用Kafka作為日志聚合解決方案的替代品。日志聚合通常從服務(wù)器收集物理日志文件,并將它們放在中央位置(可能是文件服務(wù)器或HDFS)進(jìn)行處理。Kafka抽象出文件的細(xì)節(jié),并將日志或事件數(shù)據(jù)更清晰地抽象為消息流。

流處理

從0.10.0.0開始,這是一個(gè)輕量級但功能強(qiáng)大的流處理庫,名為Kafka Streams

三、官方文檔-核心機(jī)制

http://kafka.apache.org/documentation/

簡介 使用 快速入門 都已經(jīng)學(xué)習(xí)過了

生態(tài):這里有一些kafka的生態(tài),各種Connector 可以直接連接數(shù)據(jù)庫 es等等 還可以連接其他的流處理 還有各種管理工具

confluent公司 專門做kafka的生態(tài)

https://cwiki.apache.org/confluence/display/KAFKA/Ecosystem

kafka connect stream management

kafka考慮的幾個(gè)問題:

吞吐量: 用到了page cache 并不是硬盤讀寫

消息持久化: 這個(gè)還是靠他獨(dú)特的offset設(shè)計(jì)

負(fù)載均衡:分區(qū)副本機(jī)制

由于應(yīng)用 零拷貝技術(shù) 客戶端應(yīng)用epoll 所以kafka部署在linux上性能更高。

消息:kafka的消息由 key value timestamp組成 消息頭里定義了一些壓縮 版本號的信息

crc 版本號 屬性 時(shí)間戳 長度 key長度 key value長度 value

用的是二進(jìn)制 不用java類

topic和partition:

這是kafka最核心,也是最重要的機(jī)制,這個(gè)機(jī)制讓他區(qū)別于其他。

offset是指某一個(gè)分區(qū)的偏移量。

topic partition offset 這三個(gè)唯一確定一條消息。

生產(chǎn)者的offset其實(shí)就是最新的offset。

消費(fèi)者的offset是他自己維護(hù)的,他可以選擇分區(qū)最開始,最新,也可以記住他消費(fèi)到哪了。

消費(fèi)者數(shù)大于分區(qū),就會有消費(fèi)者空著。 消費(fèi)者數(shù)小于分區(qū),就會均衡消費(fèi)。

因?yàn)閗afka的設(shè)計(jì)是在一個(gè)partition上是不允許并發(fā)的,所以consumer數(shù)不要大于partition數(shù) ,浪費(fèi)。

如果consumer從多個(gè)partition讀到數(shù)據(jù),不保證數(shù)據(jù)間的順序性,kafka只保證在一個(gè)partition上數(shù)據(jù)是有序的,但多個(gè)partition,根據(jù)你讀的順序會有不同。

增減consumer,broker,partition會導(dǎo)致rebalance,所以rebalance后consumer對應(yīng)的partition會發(fā)生變化 。

消費(fèi)者組是為了不同組的消費(fèi)者可以同時(shí)消費(fèi)一個(gè)分區(qū)的消息。

replica

這是為了防止服務(wù)器掛掉。

分為兩類 leader replica 和 follow replica

只有 leader replica會響應(yīng)客戶端。

一旦leader replica所在的broker宕機(jī),會選出新的leader。

kafka保證一個(gè)partition的多個(gè)replica一定不會分配到同一臺broker上。

follow與leader實(shí)時(shí)同步。

ISR

in-sync replica 與leader replica保持同步的replica集合

正常時(shí),所有的replica都在ISR中,但如果響應(yīng)太慢,就會踢出ISR。之后追上來再加進(jìn)來。

ISR中至少有一個(gè)replica是活著的。

ISR中所有replica都收到消息,這個(gè)消息才是已提交狀態(tài)。

四、版本變化

版本.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容