女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Redis流與Kafka相比如何?

馬哥Linux運維 ? 來源:cnblogs ? 2024-02-21 16:09 ? 次閱讀

Redis流 VS Kafka

Kafka以解決大規模數據處理問題而聞名,并被廣泛部署在許多知名公司的基礎設施中。早在2015年,LinkedIn有60個集群,總共有1100個Broker,每秒處理1300萬條信息。

但事實證明,規模并不是Kafka唯一擅長的事情。它所提倡的編程范式--分區、有序、事件處理--對于你可能面臨的許多問題都是一個很好的解決方案。例如,如果事件代表的是要被索引到搜索數據庫的行,那么最后的修改就是最后的索引,這一點很重要,否則搜索將無限期地返回陳舊的數據。同樣,如果事件代表用戶行為,處理第二個事件("用戶升級賬戶")可能依賴于第一個("用戶創建賬戶")。這種范式與傳統的作業隊列系統不同,在傳統的作業隊列中,事件是由許多工作者同時從隊列中彈出的,這很簡單,可擴展,但它破壞了任何排序保證。假設你想要有序的處理,但也許你不想使用Kafka,因為它是一個難以操作或昂貴的重型系統的聲譽。Redis現在有了5.0版本發布的"流 "數據結構,與之相比如何?它是否解決了同樣的問題?

Kafka的架構

我們先來看看Kafka的基本架構。基本的數據結構是主題。它是一個按時間排序的記錄序列,只需追加。使用這種數據結構的好處在Jay Kreps的經典博文The Log中得到了很好的描述。

dea01f4e-cfd0-11ee-a297-92fbcf53809c.png

主題Topic被分區,以使它們能夠擴展:每個主題可以被托管在單獨的Kafka實例上。每個分區中的記錄都被分配了連續的ID,稱為偏移量,它可以唯一地識別分區中的每個記錄。消費者按順序處理記錄,保持跟蹤其最后看到的偏移量。由于記錄被持久化在一個主題中,多個消費者可以相互獨立地處理記錄

deaca0a2-cfd0-11ee-a297-92fbcf53809c.png

在實踐中,你可能會將你的處理分布在許多機器上。為了實現這一點,Kafka提供了一個 "消費者組 "的抽象,它是一組合作的進程,從一個主題消費數據。一個主題的分區被劃分給組內的成員。然后,當成員加入或離開該組時,必須重新分配分區,以便每個成員都能獲得公平的分區份額。這就是所謂的再平衡算法

deb99f6e-cfd0-11ee-a297-92fbcf53809c.png

請注意,一個分區只能由消費者組的一個成員來處理。(但一個成員可能負責多個分區)這使得嚴格有序的處理得到保證。

這套工具是非常有用的。你可以通過添加更多的工作者來輕松地擴展你的處理,而Kafka則負責處理分布式協調問題。

Redis的流數據結構

Redis的 "流 "數據結構是如何比較的?Redis流在概念上等同于上面描述的Kafka主題的一個分區,但有一些小的區別。

它是一個持久的、有序的事件存儲(與Kafka中相同)

它有一個可配置的最大長度(與Kafka中的保留期相比)。

事件存儲鍵和值,就像Redis Hash(相對于Kafka中的單個鍵和值)。

最主要的區別是,Redis中的消費者組與Kafka中的消費者組完全不同。

在Redis中,一個消費者組是一組全部從同一流讀取的進程。Redis確保事件只會被傳遞給組內的一個消費者。例如,在下圖中,消費者1不會處理'9',它會跳過它,因為消費者2已經看到它了。消費者1將得到下一個未被任何其他組成員看到的事件。

dec3a3c4-cfd0-11ee-a297-92fbcf53809c.png

組的作用是將單個流的處理并行化。這看起來很像一個傳統的作業隊列結構。因此,它失去了作為流處理核心的排序保證,這是很不幸的。

流處理作為一個客戶端庫

那么,如果Redis只提供有效的具有作業隊列語義的主題的單一分區,我們怎么能在Redis之上建立一個流處理引擎?好吧,如果你想要Kafka的功能,你需要自己構建它們。這意味著要實現。

1. 事件分區。你需要創建N個流,并將每個流視為一個分區。然后,在發送時,你需要決定哪個分區應該接收它,大概是基于事件的哈希值或其中的一個字段。

2. 一個工人分區分配系統。為了擴展和支持多個工作者,你需要創建一個算法,在他們之間分配分區,確保每個工作者擁有一個相互排斥的子集,也就是相當于Kafka的 "再平衡 "系統。

3. 有確認的順序處理。每個工作者都需要迭代其每個分區,跟蹤其偏移量。盡管Redis消費者組有作業隊列語義,但它們在這里可以提供幫助。訣竅是每個組使用一個消費者,然后為每個分區創建一個組。然后每個分區將被按順序處理,你可以利用內置的消費者組狀態跟蹤。Redis不僅可以跟蹤偏移量,還可以跟蹤每個事件的確認,這是很強大的。

這是絕對的最低要求。如果你希望你的解決方案是健壯的,你可能還想考慮錯誤處理:除了崩潰你的工作者,也許你會想要一個機制,將錯誤轉發到一個 "死信 "流并繼續處理。

好消息是--如果你喜歡Python的話--已經解決了這些問題,并且在一個新發布的名為Runnel的庫中解決了更多問題。如果你想從Redis上類似Kafka的語義中獲益,歡迎你來看看。下面是它的外觀,基本上與上面的Kafka圖之一相同。

ded12954-cfd0-11ee-a297-92fbcf53809c.png

工作者通過Redis中實現的鎖來協調他們對分區的所有權。他們通過一個特殊的 "控制 "流相互溝通。更多信息,包括架構和再平衡算法的詳細分解,請參閱Runnel文檔。

權衡

Redis是大規模事件處理的好選擇嗎?有一個基本的權衡:因為一切都在內存中,獲得了無與倫比的處理速度,但它不適合存儲無限制的數據量。使用Kafka,你可能愿意無限期地保存你的所有事件,但使用Redis,你肯定要存儲最近的事件的固定窗口--只夠你的處理器有一個舒適的緩沖區,以防止它們變慢或崩潰。這意味著你可能還想使用一個外部的長期事件存儲,例如S3,以便能夠重放它們,這增加了你的架構的復雜性,但降低了成本。

研究這個問題的主要動機是在部署和操作Redis時涉及的易用性和低成本。這就是為什么它對Kafka有吸引力。它也是一套神奇的工具,經受住了時間的考驗,非常了不起。事實證明,經過努力,它也可以支持分布式流處理范式.

審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Redis
    +關注

    關注

    0

    文章

    384

    瀏覽量

    11319
  • kafka
    +關注

    關注

    0

    文章

    53

    瀏覽量

    5361

原文標題:Redis流對比Kafka

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Redis Stream應用案例

    的基本使用介紹和設計理念可以看我之前的一篇文章(Redis Stream簡介)。Redis Stream本質上是在Redis內核上(非Redis Module)實現的一個消息發布訂閱功
    發表于 06-26 17:15

    基于發布與訂閱的消息系統Kafka

    Kafka權威指南》——初識 Kafka
    發表于 03-05 13:46

    Kafka基礎入門文檔

    kafka系統入門教程(原理、配置、集群搭建、Java應用、Kafka-manager)
    發表于 03-12 07:22

    Kafka集群環境的搭建

    1、環境版本版本:kafka2.11,zookeeper3.4注意:這里zookeeper3.4也是基于集群模式部署。2、解壓重命名tar -zxvf
    發表于 01-05 17:55

    一文讀懂什么是分布式處理系統Kafka

    Kafka是一個分布式處理系統,處理系統使它可以像消息隊列一樣publish或者subscribe消息,分布式提供了容錯性,并發處理消息的機制。
    的頭像 發表于 12-12 09:14 ?6923次閱讀
    一文讀懂什么是分布式<b class='flag-5'>流</b>處理系統<b class='flag-5'>Kafka</b>

    Kafka的概念及Kafka的宕機

    問題要從一次Kafka的宕機開始說起。 筆者所在的是一家金融科技公司,但公司內部并沒有采用在金融支付領域更為流行的 RabbitMQ ,而是采用了設計之初就為日志處理而生的 Kafka ,所以我一直
    的頭像 發表于 08-27 11:21 ?2394次閱讀
    <b class='flag-5'>Kafka</b>的概念及<b class='flag-5'>Kafka</b>的宕機

    Kafka的核心概念

    Kafka 是主流的消息系統,其中的概念還是比較多的,下面通過圖示的方式來梳理一下 Kafka 的核心概念,以便在我們的頭腦中有一個清晰的認識。
    的頭像 發表于 06-20 14:24 ?1129次閱讀

    什么是 Redis

    其他用例中變得可行,包括發布-訂閱機制、(streaming)和隊列。 主要來說,Redis 是一個內存數據庫,用作另一個“真實”數據
    的頭像 發表于 05-22 15:32 ?1327次閱讀
    什么是 <b class='flag-5'>Redis</b>

    Kafka 的簡介

    ? 1 kafka簡介 2 為什么要用消息系統 3 kafka基礎知識 4 kafka集群架構 5 總結 ? 1 kafka簡介 其主要設計目標如下: 以時間復雜度為O(1)的方式提供
    的頭像 發表于 07-03 11:10 ?835次閱讀
    <b class='flag-5'>Kafka</b> 的簡介

    物通博聯5G-kafka工業網關實現kafka協議對接到云平臺

    Kafka協議是一種基于TCP層的網絡協議,用于在分布式消息傳遞系統Apache Kafka中發送和接收消息。Kafka協議定義了客戶端和服務器之間的通信方式和數據格式,允許客戶端發送消息到K
    的頭像 發表于 07-11 10:44 ?693次閱讀

    Kafka架構技術:Kafka的架構和客戶端API設計

    Kafka 給自己的定位是事件平臺(event stream platform)。因此在消息隊列中經常使用的 "消息"一詞,在 Kafka 中被稱為 "事件"。
    的頭像 發表于 10-10 15:41 ?2680次閱讀
    <b class='flag-5'>Kafka</b>架構技術:<b class='flag-5'>Kafka</b>的架構和客戶端API設計

    如何將Kafka使用到我們的后端設計中

    本文介紹了以下內容: 1.什么是Kafka? 2.為什么我們需要使用Kafka這樣的消息系統及使用它的好處 3.如何將Kafka使用到我們的后端設計中。 譯自timber.io
    的頭像 發表于 10-30 14:30 ?760次閱讀
    如何將<b class='flag-5'>Kafka</b>使用到我們的后端設計中

    golang中使用kafka的綜合指南

    kafka是一個比較流行的分布式、可拓展、高性能、可靠的處理平臺。在處理kafka的數據時,這里有確保處理效率和可靠性的多種最佳實踐。本文將介紹這幾種實踐方式,并通過sarama實現他們。
    的頭像 發表于 11-30 11:18 ?846次閱讀

    Java redis鎖怎么實現

    的使用 在Java中使用Redis需要使用到相關的客戶端庫,比如Jedis、Lettuce等 配置Redis連接池的最大連接數、最大空閑連接數、連接超時時間等參數 通過連接池
    的頭像 發表于 12-04 10:47 ?1396次閱讀

    超詳細“零”基礎kafka入門篇

    1、認識kafka 1.1 kafka簡介 Kafka?是一個分布式流媒體平臺 kafka官網:http://kafka.apache.or
    的頭像 發表于 12-18 09:50 ?2531次閱讀
    超詳細“零”基礎<b class='flag-5'>kafka</b>入門篇