什麼是Kafka?

經過Kafka的快速入門 http://www.javashuo.com/article/p-hzttkxos-hy.htmlhtml

能瞭解到Kafka的基本部署,使用,但他和其餘的消息中間件有什麼不一樣呢?java

Kafka的基本原理,術語,版本等等都是怎麼樣的?到底什麼是Kafka呢?react

1、Kafka簡介

http://kafka.apache.org/introlinux

2011年,LinkIn開源, November 1, 2017 1.0版本發佈 July 30, 2018 2.0版本發佈web

參考官網的圖:數據庫

file

Kafka®用於構建實時數據管道和流式應用程序。它具備水平可擴展性、容錯性、速度極快,並在數千家公司投入生產。apache

kafka官網最新的定義:Apache Kafka® is a distributed streaming platformapi

也就是分佈式流式平臺。服務器

介紹:併發

三個特色:

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

消息 持久化 流處理

兩類應用:

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

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

      集羣 topic record

      四個核心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

file

客戶端服務器經過tcp協議 支持多種語言

主題和日誌

一個主題能夠有零個,一個或多個消費者訂閱寫入它的數據

對於每一個主題,Kafka羣集都維護一個分區日誌

每一個分區都是一個有序的,不可變的記錄序列,不斷附加到結構化的提交日誌中。

分區中的記錄每一個都被分配一個稱爲偏移的順序ID號,它惟一地標識分區中的每一個記錄。

file

Kafka集羣持久地保留全部已發佈的記錄 - 不管它們是否已被消耗 - 使用可配置的保留期。能夠配置這個時間。

Kafka的性能在數據大小方面其實是恆定的,所以長時間存儲數據不是問題。

file

每一個消費者保留的惟一元數據是該消費者在日誌中的偏移或位置。

這種偏移由消費者控制:一般消費者在讀取記錄時會線性地提升其偏移量,但事實上,因爲消費者控制位置,它能夠按照本身喜歡的任何順序消費記錄。例如,消費者能夠重置爲較舊的偏移量以從新處理過去的數據,或者跳到最近的記錄並從「如今」開始消費。

這使得消費者特別容易使用。

生產者:

生產者將數據發佈到他們選擇的主題。

爲了負載均衡,能夠選擇多個分區。

消費者:

消費者組

file

傳統的消息隊列 發佈訂閱 都有弊端

隊列能夠擴展但不是多用戶,發佈訂閱每條消費發給每一個消費者,沒法擴展。

可是kafka這個模式 解決了這些問題

kafka確保使用者是該分區的惟一讀者並按順序使用數據,因爲有許多分區,這仍然能夠

平衡許多消費者實例的負載。

做爲存儲系統

做爲流處理系統

2、常見使用

http://kafka.apache.org/uses

消息

Kafka能夠替代更傳統的消息代理。消息代理的使用有多種緣由(將處理與數據生成器分離,緩衝未處理的消息等)。與大多數消息傳遞系統相比,Kafka具備更好的吞吐量,內置分區,複製和容錯功能,這使其成爲大規模消息處理應用程序的理想解決方案。

根據咱們的經驗,消息傳遞的使用一般相對較低,但可能須要較低的端到端延遲,而且一般取決於Kafka提供的強大的耐用性保證。

在這個領域,Kafka可與傳統的消息傳遞系統(如ActiveMQ或 RabbitMQ)相媲美。

網站活動跟蹤

站點活動(頁面查看,搜索或用戶可能採起的其餘操做)發佈到中心主題,每一個活動類型包含一個主題。實時處理,實時監控以及加載到Hadoop或離線數據倉庫系統以進行離線處理和報告。

度量

Kafka一般用於運營監控數據。

日誌聚合

許多人使用Kafka做爲日誌聚合解決方案的替代品。日誌聚合一般從服務器收集物理日誌文件,並將它們放在中央位置(多是文件服務器或HDFS)進行處理。Kafka抽象出文件的細節,並將日誌或事件數據更清晰地抽象爲消息流。

流處理

從0.10.0.0開始,這是一個輕量級但功能強大的流處理庫,名爲Kafka Streams

3、官方文檔-核心機制

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都收到消息,這個消息纔是已提交狀態。

更多實時計算相關技術博文,歡迎關注實時流式計算

相關文章
相關標籤/搜索