kafka學習(二)-------- 什麼是Kafka

来源:https://www.cnblogs.com/tree1123/archive/2019/07/22/11226880.html
-Advertisement-
Play Games

通過Kafka的快速入門 https://www.cnblogs.com/tree1123/p/11150927.html 能瞭解到Kafka的基本部署,使用,但他和其他的消息中間件有什麼不同呢? Kafka的基本原理,術語,版本等等都是怎麼樣的?到底什麼是Kafka呢? 一、Kafka簡介 "ht ...


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

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

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

也就是分散式流式平臺。

介紹:

三個特點:

  • 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

客戶端伺服器通過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等等 還可以連接其他的流處理 還有各種管理工具

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

kafka connect stream management

kafka考慮的幾個問題:

吞吐量: 用到了page cache 並不是硬碟讀寫

消息持久化: 這個還是靠他獨特的offset設計

負載均衡:分區副本機制

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

crc 版本號 屬性 時間戳 長度 key長度 key value長度 value

用的是二進位 不用java類

topic和partition:

這是kafka最核心,也是最重要的機制,這個機制讓他區別於其他。

offset是指某一個分區的偏移量。

topic partition offset 這三個唯一確定一條消息。

生產者的offset其實就是最新的offset。

消費者的offset是他自己維護的,他可以選擇分區最開始,最新,也可以記住他消費到哪了。

消費者數大於分區,就會有消費者空著。 消費者數小於分區,就會均衡消費。

消費者組是為了不同組的消費者可以同時消費一個分區的消息。

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 查看 sql查詢記錄 日誌是否開啟 二進位日誌 是否開啟 開啟與關閉二進位日誌 mysql-bin.000001刪除二進位日誌文件方法,執行以下語句(不要直接刪除文件) 我用的是寶塔.不知為何用以上方法無效.在管理面板裡面設置才行.用其他軟體搭建的環境應該用以上方法可以吧,有待嘗試 ...
  • 分組查詢 分組函數 :group by 要分組的列名 對數據集合處理的函數,可以處理多行數據--5個分組函數--count --計數函數,用於數量的統計--sum 求和函數,對數據進行求和--avg 求評平均,對一組數據求平均值--min ,求最小值--max ,求最大值--分組函數,也叫統計函數, ...
  • 1. 資料庫操作與存儲引擎 1.1 資料庫和資料庫對象 資料庫對象:存儲,管理和使用數據的不同結構形式,如:表、視圖、存儲過程、函數、觸發器、事件等。 資料庫:存儲資料庫對象的容器。 資料庫分兩種: ①系統資料庫(系統自帶的資料庫):不能修改,不能刪除 information_schema:存儲數據 ...
  • 使用批處理命令註冊運行mysql資料庫,無需註冊mysql服務,可以在任意電腦登錄使用,一次配置,到處運行,就是這麼方便 ...
  • orcal 第二章 練習1 1.使用兩種方式查詢所有員工信息 select * from emp select EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO from emp 2.查詢員工編號、員工姓名、員工職位、員工月 薪、工作部門編號。 select ...
  • 看到網上很多朋友在問,limit分頁之後按照欄位屬性排序的問題,在這裡分享一下我的用法: 1.網上答案: 每頁顯示5個,顯示第三頁信息,按照年齡從小到大排序 select * from student order by age asc limit 10,5; 這個答案是先實現了排序,再分頁的操作,而 ...
  • 資料庫中有很多鎖,但鎖是為瞭解決什麼問題?具體都有哪些鎖呢?這篇文章簡單對MySQL中的鎖做了一個總結 一、鎖的設計是為瞭解決什麼問題? 當多用戶讀寫數據的時候,就有可能會出現同一時刻對同一條數據的讀寫,如果是大家都只是對同一條數據進行讀,無所謂,大家讀到數據都是一樣的,但當有的想要讀取數據,有的想 ...
  • [學習筆記]package comimport org.apache.spark.rdd.RDDimport org.apache.spark.SparkConfimport org.apache.spark.SparkContextobject TestRDD { def main(args: A ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...