Kafka:微服務中消息代理的絕佳選擇

已發表: 2022-11-19

Kafka 是一個分佈式流媒體平台。 它通常用於日誌聚合、實時流處理和事件溯源。 最近,Kafka 作為微服務的消息代理越來越受歡迎。 Kafka 不是像 ActiveMQ 或 RabbitMQ 這樣的傳統消息隊列。 它沒有存儲所有消息的中央服務器。 相反,它使用發布-訂閱模型。 消息存儲在主題中,每個主題可以有多個分區。 Kafka 具有高可用性和可擴展性。 它每天可以處理數十億條消息。 Kafka 也非常快。 它可以實時處理消息。 Kafka 是構建微服務消息代理的絕佳選擇。 它具有高可用性、可擴展性和快速性。

Kafka 是一個實時消息系統,使這成為可能。 數據流不受干擾,可以分佈式或容錯。 Kafka Data Integration Bus是一種數據交換協議,可以讓廣泛的生產者和消費者共享數據。 Kafka 的功能類似於 MongoDB 和 RDS,它們在您的應用程序末端充當數據緩衝區。

KSQL 是一種基於 SQL 的腳本語言,用於分析和處理Apache Kafka中的實時流數據。 KSQL 包含一個用於流處理的交互式框架,旨在允許您執行流處理活動,例如數據聚合、過濾、連接、會話化、窗口化等。

正如 Apache Kafka 所展示的那樣,它不僅僅是一個出色的消息代理。 該框架實現具有許多類似於數據庫的特性,使其適合在數據庫中使用。 因此,它現在用作業務事件記錄,而不是依賴於關係數據庫。

Kafka 應用程序以簡單高效的方式從 MongoDB 流式傳輸數據,從而節省了時間和精力。 企業需要 MongoDB 向其他訂閱者發布大量數據以及管理多個數據流。 Kafka MongoDB 連接服務使開發人員能夠使用流行的行業工具 MongoDB 創建多個異步流。

在數據庫中,Apache Kafka 充當模型。 數百家公司使用它來提供 ACID 保證並執行關鍵任務。 然而,在大多數情況下,Kafka 的競爭力不如其他數據庫。

Kafka 是什麼類型的數據庫?

圖片來源:https://davidxiang.com

Kafka 是一種用於存儲和檢索消息的數據庫。 它是一個分佈式系統,被設計為可擴展和容錯的。

它是一個用 Scala 和 Java 編寫的開源流處理平台,是 Apache 軟件基金會的Kafka 項目的一部分。 計算機科學中的流是隨時間推移可用的信息元素的集合。 流可以定義為一次處理一個傳送帶中的項目。 最基本形式的流可以是一系列看似無關的事件。 事件溯源的概念不同於開發人員習慣的數據倉庫和數據分析的概念。 如何使用 Kafka 作為數據庫? 藍色是同意交易的公司。

根據 Team Red 的說法,程序員在從傳統數據庫轉向 Kafka 時犯了一個巨大的錯誤。 根據 Martin Kleppmann 的說法,Red 團隊關於 Kafka 適合所有人的信息是居高臨下的。 Red 團隊在 Kafka 和 Streams 方面存在的問題是,他們在開發人員丟棄 RDMS 時遇到了問題。 當呈現永久事件日誌時,它將始終具有其歷史上下文,從而易於審核。 數據庫管理有很多優點,但也是最困難的方面之一。 傳統數據庫以兩種完全不同的方式運行:它將讀和寫混為一談。 對於程序員來說,跨多個表維護和同步重複數據至關重要。

縮放會隨著您的移動而改變模式。 流的特點是明確區分讀者和作者的關注點。 Kafka 寫入文件的速度與 Elastic Search 向其推送更新的速度之間沒有關係。 因此, Kafka 用戶處理日誌以生成各種物化視圖。 使物化視圖作為一種方便的緩存機制工作需要一些前期成本。 物化視圖,除了存儲自己的數據和縮放之外,是基礎設施的重要組成部分。 對於 99% 的企業,DBMS 是最好的基礎。

您的應用程序可能屬於此類,並且您可能有權根據您的背景獲得一種新穎的架構。 如果用日誌替換數據庫,許多關鍵功能將丟失。 這些功能包括外鍵約束、原子(全有或全無)事務以及有助於解決並發問題的過程隔離技術。 Arjun 假定您的應用程序的完整性始終得到維護。 當您在流上工作時,大多數人認為理所當然的基本功能會變成額外的責任。 將意圖與書面陳述分開至關重要。 一個常見的配置是將 Kafka 與變更數據捕獲系統一起使用。

據 Team Red 稱,數據庫的數據完整性功能對於實現數據控制至關重要。 事務必須與傳統數據庫隔離開來,以便考慮它們。 因此,單篇文章的成本可能很高。 如果您的應用程序正在努力應對大量昂貴的寫入,您可能被迫遷移到更傳統的數據庫。 Red 團隊沒有提到在 Kafka 前面使用數據庫會降低其最佳功能。

與傳統的消息系統相比,這種設計的優勢非常明顯。 Kafka 的第一個優勢是它可以處理大量的請求。 此外,由於數據只在需要時寫入磁盤,因此 Kafka 可以處理海量數據。
SQL Server 是屬於工具類別的數據庫工具。 這種手持設備用途廣泛且可靠,但有時可能難以使用。 Kafka 和 Azure 都是功能非常強大的平台,但 Kafka 是按比例放大的,而 Azure 是按比例縮小的。
SQL Server 對於需要大量數據存儲的企業來說是一個優秀的工具,但對於那些需要快速擴展或高吞吐量的企業來說,它可能不是最佳選擇。 對於需要在不影響性能的情況下處理大量數據的業務,Kafka 是比 SQL Server 更好的選擇。

Kafka:時間序列遙測的分佈式存儲系統

Kafka 分佈式存儲系統採用基於主題的模型來存儲數據。 數據可以存儲在 Kafka 數據庫的基於主題的模型中,而不是關係數據庫中。 它的行為類似於Kafka 主題中的隊列,儘管與隊列的行為方式不同。 它可以在 Kafka 框架中存儲大量時間序列,而不是時間序列數據庫。

Kafka 和 MongoDB 有什麼區別?

圖片來源:https://medium.com

它是一種基於分佈式系統的分佈式、分區和復制的提交日誌服務。 儘管其設計獨特,但它是消息傳遞系統的重要組成部分。 另一方面,MongoDB 被描述為“偉大創意的數據庫”。

由於 Kafka 不支持開箱即用的隊列,因此您必須將其 hack 到系統的消費者版本中。 如果需要關係數據庫,另一個工具可能會有更大的用處。 MongoDB 是一個很好的選擇,原因有很多,包括它的易用性和靈活性。 Apache 的用戶支持可用。 Confluent 有一個與 Kafka 項目同時在 Linkedin 創建的 Kafka(如果願意付費的話)。 有一個供應商可以執行自動備份並自動擴展集群是非常方便的。 如果您沒有了解 MongoDB 的系統管理員或 DBA,最好使用專門從事 MongoDB 託管的第三方。

Kafka 以其最基本的形式旨在允許我們對消息進行排隊。 Cassandra 的存儲引擎可確保恆定時間寫入您的數據,無論數據變得多大。 MongoDB 提供自定義 map/reduce 實現以及對分析的本機 Hadoop 支持,而 Cassandra 則沒有。 它是由您還是由其他提供商託管都沒有關係,因為成本通常是合理的。

卡夫卡與。 傳統數據庫系統

需要注意的是,Kafka 與傳統數據庫系統之間存在一些差異。
因為 Kafka 是一個流媒體平台,它可以處理高速率的數據攝取,而無需進行大量的預先處理。
運行 Kafka 時,數據由尾讀取而不是磁盤讀取消耗。
頁面緩存的使用減少了 Kafka 往返數據庫訪問的需要。
為了向下游客戶發送數據,Kafka 使用發布/訂閱消息傳遞。

什麼是卡夫卡數據庫

圖片來源:https://yelp.com

Kafka 是一種常用於存儲流式數據的數據庫。 它是一個分佈式系統,被設計為可擴展和容錯的。 Kafka 通常用於構建實時數據管道和流式應用程序。 它可以處理高吞吐量和低延遲。

近年來,諸如 Kafka 之類的消息代理越來越受歡迎。 根據支持者的說法,Kafka 是數據管理的範式轉變。 重要的是要記住,使用 Kafka 作為您的主要數據存儲並不能為您提供隔離。 數據庫系統遇到的每一個問題都會在未來得到解決。 黑客可以利用自主架構中的缺陷竊取數據。 如果兩個用戶同時嘗試購買同一件商品,他們都會成功,我們將耗盡他們兩人的庫存。 這些在運行 gaslight 設備時使用時間旅行功能的架構依賴於事件驅動的架構。

管理大量數據是 Kafka 的一個絕佳用途。 事務仍應使用傳統的 DBMS 進行隔離。 使用 OLTP 數據庫進行准入控制,使用 CDC 進行事件生成,並在視圖出現時對下游副本進行建模,以便徹底顛覆您的數據庫。

Kafka 還可用於存儲大量數據並進行日常處理。 以批處理或流模式處理大數據的能力是優於其他方法的優勢。 例如, Kafka 進程可用於從多個服務器檢索日誌文件並將它們存儲在數據庫或搜索索引中。 還提供了一個流式 API,可用於實時處理數據。

卡夫卡與 SQL

總的來說,Kafka 和 MySQL 分為兩類:消息隊列和數據庫應用。 大多數開發人員將 Kafka 視為一種高吞吐量、分佈式和可擴展性的解決方案,而 MySQL 因其簡單性、性能和易用性而被視為最受歡迎的解決方案。

Kafka 上的 Pub-sub 消息傳遞是一個分佈式、容錯、高吞吐量的系統,可以處理大量數據。 MySQL 是世界上最流行的開源數據庫,旨在用於關鍵任務和重負載生產系統。 開發人員認為 Kafka 比 MySQL 更強大,因為它具有高吞吐量、分佈式架構和可擴展性; 而 SQL、Free 和 Easy 是 MySQL 用戶喜歡它的主要原因。 如果您想親身體驗數據庫管理系統 (DBMS),我推薦您使用 PostgreSQL。 在 Vital Beats,我們主要使用 Postgres,因為它使我們能夠在有效數據管理和備份之間實現所需的平衡,同時仍然支持命令行。 如果您計劃在本地或云端託管數據庫,第一個接觸點是 PaaS(平台即服務)數據庫。 因為 MongoDB 將數據寫在與一個文檔相同的級別上,所以沒有事務就很難保持一致性。

文檔存儲,如 Amazon DynamoDB 和 AWS RedShift 中的文檔存儲,與 MongoDB 中的鍵值對(或列存儲)有很大不同。 使用#Nosql 數據庫查詢更快更容易,因為開發時間減少了。 作為房地產行業的新員工,我想選擇一個隨著時間的推移會非常高效的數據庫。 如果您通過單一區域部署在 AWS 上運行 Aurora Postgres,它是我推薦的最佳平台之一。 如果你在三個雲環境中使用 PostgreSQL,你將體驗到更好的多區域複製。 如果您正確配置它們,這三個數據庫中的任何一個都將高效、可擴展且長期可靠地運行。 Uber 出於各種原因從 Postgres 轉向 MySql,包括需要更敏捷和可靠的數據傳輸系統。

OPS Platform 的首席技術官表示,Postgres 因其速度和易用性而成為其產品最有效的長期選擇。 與 MySQL 7.x 相比,MySQL 8.0 中的事務處理速度更快。 數據庫更安全嗎? 是否可以隨機更改加密密鑰? MySQL 和 MongoDB 是兩個最流行的開源數據庫。 除了可以輕鬆存儲數據之外,MongoDB 還可用於通過內容分發網絡 (CDN) 存儲大量傳入數據。 Postgres 相對於其他對象關係數據庫的主要優勢在於它強調可擴展性和標準遵從性。

可以創建常規 B 樹和散列索引,以及表達式和部分索引(那些只影響表的一部分的索引)。 Redis 和 Kafka 之間最基本的區別是它們使用企業消息傳遞框架。 當我選擇一種技術時,我正在尋找一種雲原生技術。 除了服務發現,NATS 還可以用來替代負載均衡、全局多集群等操作。 Redis 唯一不做的就是充當純消息代理(截至撰寫時)。 因此,它更像是一個通用的內存中鍵值存儲。 儘管擁有豐富的音樂庫,但我的歌曲時長常常超過兩個小時。

將音頻文件在數據庫行中存儲幾個小時的問題是它們不容易搜索。 如果您願意,可以考慮將音頻文件存儲在 Backblaze b2 或 AWS S3 等雲存儲服務中。 有沒有在 IoT World 上使用 MQTT Broker 的解決方案? 它位於其中一個數據中心內。 我們目前正在處理它以用於警報和警報相關目的。 我們的主要目標是使用更輕的產品來降低操作複雜性和維護成本。 如果我們可以將 Apache Kafka 與這些額外的第三方 API 調用集成,那將是理想的。

RabbitMQ 應用程序是重試和排隊的絕佳選擇。 如果您不需要每條消息由多個用戶處理,您可以使用 RabbitMQ。 使用 Kafka 來交付帶有確認的系統是沒有意義的。 Kafka 事件狀態管理器與持久化事件狀態管理器類似,允許您使用流 API 轉換和查詢各種數據源。 RabbitMQ 框架非常適合一對一的發布者或訂閱者(或消費者),我相信可以配置扇出交換來支持多個消費者。 Pushnami 項目演示瞭如何將實時數據從一個數據庫遷移到另一個數據庫。 由於每個前端 (Angular)、後端 (Node.js) 和前端 (MongoDB) 都是本機的,因此數據交換要容易得多。

為了避免翻譯層,我跳過了與層次結構部分的關係。 在 MongoDB 對像中保持有限大小並使用正確的索引至關重要。 早在 1960 年代,一些最早的電子病歷 (EMR) 就使用了面向文檔的數據庫 MUMPS。 MongoDB 存儲了多達 40% 的所有醫院記錄,被認為是一個強大的醫療數據庫。 然而,有一些非常聰明的方法來執行非本機支持的地理查詢,從長遠來看,這是極其緩慢的。 Amazon Kinesis 每秒處理來自數十萬個來源的數十萬個數據文件。 RabbitMQ 使您可以輕鬆地從任何應用程序發送和接收消息。 Apache ActiveMQ 速度快,支持範圍廣泛的跨語言客戶端,並且是一種健壯的腳本語言。 Hadoop 數據使用名為 Spark 的快速通用處理引擎進行處理。

Kafka 與 MongoDB

Mongodb 是一個強大的面向文檔的數據庫,具有許多特性,使其成為各種應用程序的不錯選擇。 Kafka 是一個高性能的流媒體平台,可用於構建實時數據管道和流媒體應用程序。

從作為源的 MongoDB 傳輸到其他 MongoDB 源或其他 MongoDB 源可以與 Kafka 到 MongoDB 應用程序無縫連接。 在 MongoDB Kafka 連接器的幫助下,您將學習如何高效地傳輸數據。 使用此功能,您可以為您的組織創建全新的 ETL 管道。 Confluent 提供了多種充當源和彙的連接器,允許用戶在兩者之間傳輸數據。 Debezium MongoDB 連接器就是這樣一種連接機制,它使 Kafka MongoDB 用戶能夠連接到 MongoDB 數據庫。 在啟動 Confluent Kafka 之前,您必須首先確保它正在您的系統上運行。 通過使用 KStream、KSQL 或任何其他工具(如 Spark Streaming)等功能,您可以在 Kafka 中分析數據。

將數據輸入倉庫需要手動腳本和自定義代碼。 Hevo 的無代碼數據管道平台讓您無需編碼即可創建簡單的數據管道系統。 Hevo 透明的定價平台使您能夠實時查看 ELT 支出的每個細節。 試用期持續 14 天,包括 24×7 支持。 端到端加密是通過使用最嚴格的安全認證來完成的。 Hevo 可用於將您的 Kafka 和 MongoDB 數據安全地傳輸到 150 個不同的數據源(包括 40 個免費來源)。

什麼是 Kafka 和 Mongodb?

MongoDB Kafka 連接器是經過 Confluent 驗證的連接器,它將來自 Kafka 主題的數據作為數據接收器保存到 MongoDB 中,並將對這些主題的更改作為數據源發布。

使用 Kafka 作為數據庫的優缺點

哪個數據庫適合Kafka? 原則上可以使用Kafka來創建數據庫。 結果將是對困擾數據庫管理系統數十年的每一個主要問題的檢查。 數據庫管理系統 (DBMS) 是一種組織和查詢數據的軟件。 它們是大型應用程序和存儲必須由多個用戶訪問的數據所必需的。 DBMS 分為兩種類型:關係型和非關係型。 關係模型是在關係 DBMS 中表示信息的標準方法。 它們很受歡迎,因為它們易於使用,並且可以用於存儲以表格形式組織的數據。 不使用關係模型的 DBMS 不如使用其他模型的 DBMS 強大。 為了更有效地組織數據,數據還以表格以外的其他格式存儲,例如數據流。 Kafka 模型用於創建數據庫,可用於多種用途。 流處理是 Kafka 的核心,這是一種新的數據表示模型。 數據管理系統 (DMS) 是數據管理的重要組成部分。 然而,使用 Kafka 作為數據庫有時會很困難。 DBMS 遇到的一些最常見的問題是性能、可伸縮性和可靠性。 Fivetran 首席執行官 George Fraser 和 Materialise 首席執行官 Arjun Narayan 共同撰寫了這篇文章。

卡夫卡持久化數據庫

Kafka 持久性數據庫提供了一種以高可用和可擴展的方式將數據存儲在kafka 集群中的方法。 默認情況下,kafka 會使用內存數據庫來存儲數據,但這不適合生產部署。 kafka 持久化數據庫可用於為 kafka 數據提供更可靠的存儲選項。

LinkedIn 在 2011 年創建了開源 Apache kaffef。該平台能夠以極低的延遲和吞吐量提供實時數據。 在大多數情況下,可以通過Kafka Connect從外部系統導入和導出數據。 新的解決方案可以幫助解決存儲性能低下和驅動器未充分利用等問題。 儘管存在架構方面的挑戰,本地閃存仍然是 Kafka 系統的絕佳選擇。 因為 Kakfa 中的每個主題只能在一個驅動器上訪問,所以會增加未充分利用的情況。 同步也可能很困難,從而導致成本和效率問題。

當 SSD 出現故障時,必須完全重建其中的數據。 這個耗時的過程會降低集群性能。 Kafka 最適合基於 NVMe/TCP 的存儲,因為它可以平衡可靠性和性能之間的權衡。

Kafka 是一個很棒的消息系統,但不是一個完美的數據存儲解決方案

Kafka 是一個優秀的消息系統,可以用來存儲數據。 Kafka 的保留選項之一是保留時間為 -1,它指的是生命週期保留。 但是,Kafka 的可靠性遠不及傳統數據庫。 需要注意的是,Kafka 將數據存儲在磁盤、校驗和和復制中以實現容錯,因此積累更多的存儲數據不會降低速度。 Kafka 可以用來發送和接收消息,但它不是存儲數據的最佳選擇。

什麼是卡夫卡

Kafka 是一種快速、可擴展、持久且容錯的發布-訂閱消息系統。 Kafka 被 LinkedIn、Twitter、Netflix 和 Airbnb 等公司用於生產。
Kafka 的設計簡單明了。 它是一個運行在機器集群上的分佈式系統,可以水平擴展。 Kafka 旨在處理高吞吐量和低延遲。
Kafka 用於構建實時流數據管道和應用程序。 它可用於實時處理和聚合數據。 Kafka 還可以用於事件處理、日誌記錄和審計。

LinkedIn 於 2011 年推出了 Kafka 來處理實時數據饋送。 如今,超過 80% 的財富 100 強企業都在使用 Kafka。 Kafka Streams API是一個功能強大的輕量級庫,旨在實現即時處理。 除了流行的分佈式數據庫之外,Kafka 還包括分佈式提交日誌的抽象。 與消息隊列不同,Kafka 是一個具有高可擴展性的高適應性、容錯的分佈式系統。 例如,它可用於管理 Uber 的乘客和司機匹配,或在 British Gas 提供實時分析。 許多微服務依賴於 Kafka。 Confluent 的雲原生、完整、完全託管的服務優於 Kafka。 Confluent 通過將歷史數據和實時數據結合到一個統一的真實來源中,可以輕鬆構建全新類別的現代事件驅動應用程序。

在 Kinesis 的幫助下,您可以處理範圍廣泛的數據流,使其成為一個功能強大且用途廣泛的流處理平台。 它是一個流行的平台,因為它的速度、簡單性和與各種設備的兼容性。 由於其可靠性,它是最受歡迎的流媒體平台之一。 由於其耐用性,它可以處理大量數據而不會遇到任何問題。 此外,由於它是一個被廣泛使用和支持的知名平台,因此很容易找到合作夥伴或集成商來幫助您開始使用它。 如果您正在尋找一個既強大又可靠的流媒體平台,Kinesis 是一個很好的選擇。

Kafka:正在取代數據庫的消息系統

Kafka 是一個消息系統,用於構建實時流數據管道和應用程序,可以使實時數據流適應不斷變化的數據環境。 通過使用用 Scala 和 Java 編寫的 Kafka,通過實時事件流處理大數據。 Kafka 連接可以從一個點擴展到另一個點,也可以用於在源之間發送數據。 事件流媒體平台旨在提供事件的實時流媒體。 將數據庫與 Kafka 等消息傳遞解決方案進行比較是不公平的。 由於 Kafka 中的特性,不再需要數據庫。

Kafka 不是數據庫

Kafka 不是數據庫,但它經常與數據庫結合使用。 它是一個消息代理,可用於在系統的不同組件之間發送消息。 它通常用於解耦系統的不同部分,以便它們可以獨立擴展。

可以用數據庫替換 Apache Kafka,但不要為了方便而這樣做。 在 Top Gear 劇集中,主角每人因購買二手中置發動機意大利超級跑車而獲得 10,000 美元,這讓我想起了舊的 Top Gear 劇集,其中主角每人獲得 10,000 美元。 2011 年,LinkedIn 發布了 Kafka,同年播出了這一集。 它允許您執行最少的持久消息傳遞,而無需投資於功能齊全的消息傳遞平台。 基本前提是有一個基本規則。 為生產者進程中記錄的每個事件創建一個表(或存儲桶、集合、索引等)。 定期從消費者實例輪詢數據庫,在處理時更新消費者的狀態。

為了使模型正常工作,生產者和消費者應該能夠同時工作。 考慮以卡夫卡的書為指導,無限期地存儲記錄,而不是簡單地閱讀它們。 另一方面,可以通過在插入時復制記錄,然後在消費後刪除記錄來實現不相交的消費者組。 Kafka 使用持久偏移來啟用其用戶定義的數據扇形並支持多個不相交的消費者。 要停止此功能,您必須從頭開始開發服務。 實現基於時間的清除的概念並不難,但需要承載清道夫的邏輯。 在 Kafka 上,對所有參與者(消費者、生產者和管理員)都有細粒度的控制。

它可以在商品和雲服務器上每秒處理數百萬條記錄,沒有任何問題。 在非功能意義上,Kafka 針對生產者端和消費者端的高吞吐量進行了優化。 使用Kafka,它是一個分佈式的,只追加的日誌,在這個領域是無可匹敵的。 與傳統的消息代理在消費階段刪除消息不同,Kafka 不會在消息被消費後清除消息。 數據庫的吞吐量和延遲幾乎肯定需要通過使用專用硬件和高度集中的性能調整來顯著改善。 乍一看,免除經紀人可能很有吸引力。 當您使用諸如 Kafka 之類的流式事件平台時,您可以利用其構建過程中所付出的巨大工程努力。

為確保您今天選擇部署的任何解決方案都能得到維護,您必須確保它能夠以高標準得到維護。 事件存儲中的大部分功能只能通過使用數據庫來實現。 沒有放之四海而皆準的活動商店; 在大多數情況下,任何重要的事件存儲幾乎肯定是由一個或多個現成數據庫支持的定制實現。 您可以在組織數據領域使用數據庫以進行高效檢索,但您應該避免使用它們來(近)實時分發數據。