<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Kafka基礎概念 ### 前言 最近項目中要使用到流式數據處理,借此機會學習一下Kafka的相關知識。 ### 簡介 Apache Kafka是一個分布式的、分區的、可重復提交的日志系統。它以獨特的設計提供了消息系統的功能。作為一個Apache開源項目,Kafka已經得到很多業內人士的關注,并且已經在很多公司內部進行使用,如Linkin、eBay等。 Kafka作為一個分布式發布-訂閱系統,也遵循著一般的發布-訂閱系統的基礎架構。 ![kafka-pubsub](https://box.kancloud.cn/2016-03-21_56efa3c64ed50.jpg "") Kafka中將不同的消息通過不同的主題(topic)來區分,在圖中,生產者向Kafka集群發布消息,消費者通過向某一個主題注冊,進而接收相關主題的消息。Kafka可以運行在一臺或多臺的服務器上,每臺服務器成為一個經紀人(broker)。 ### 主要概念 ### 分區(Partition) Kafka會為每個主題分一個區,發布的消息都會存到相應的分區中。每個分區是一個有序的、不可變的序列,每條消息通過偏移量來定位。具體情形如下: ![kafka-partition](https://box.kancloud.cn/2016-03-21_56efa3c670f10.jpg "") 這樣做的好處是,因為一個主題可以有多個分區,所以可以容易地拓展主題的容量到多臺機器。同時分區也為高并發、高容錯性提供了可能性。 ### 主題(Topics)和日志(Logs) 需要注意的是,Kafka保存數據是根據時間來決定的,而不是它是否被消費者消費。如果在數據的生命周期內,它被消費后仍然會存儲在Kafka中。但如果它在生命周期內沒有被消費,同樣它也會在生命周期結束時被丟棄。而消費者是通過分區中的偏移量來定位消費的數據的,通常是順序讀下去,但也可以通過改變偏移量的值來隨意讀取信息。 ### 分布式(Distribution) 分布式跟分區是緊密相連的,正是數據是以分區的形式存儲的,才給分布式提供了可能。分區的數據會在多個服務器上進行備份以便容錯。每份數據都會以主分區的形式存儲在某一臺服務器上,它的副本稱為從分區,存儲在其他服務器上。主分區處理來自外界的讀寫請求,從分區會被動的復制數據的變化。如果主分區出現了故障,某一個從分區會變為主分區。此外一臺服務器可以擁有一個主分區和多個其他分區的從分區,這樣能充分利用資源,又保證了容錯性。 ### 生產者(Producers) 生產者決定發布什么消息、消息屬于哪個主題及在該主題的哪個分區下,關于分區的選擇可以通過自己設定的方法來實現不同的方案。 ### 消費者(Consumers) 消費者會被被劃分成一個個消費者組,屬于某一個主題的消息會被分派到它的一個分區下,而該分區與訂閱了該主題的消費組中的某一個消費者相對應,也就是說消息只會發送給訂閱的消費者組中的一個消費者。可以把消費者組理解成消息的真正的訂閱者,而它下面的消費者只是處理消息的線程池,這樣做可以保證系統的擴展性和容錯性。而消費者與分區的關系是,每個分區只能有一個消費者,這樣保證了在這一分區中的所有消息都能按序處理。但不同分區中的消息處理順序不能保證,如果要保證所有的數據都按序處理,可以使每個話題只有一個分區,每個消費者組只有一個消費者。 ### 保證(Guarantees) Kafka可以保證: - 由生產者發送給特定主題分區的消息會以發送的順序添加。也就是說,后發送的消息一定在先發送的消息之后。 - 消費者會按消息在日志中的存儲順序看到它們。 - 對于副本因子為N的主題,我們可以承受N-1個服務器發生故障而保證提交到日志的消息不會丟失。 ### 應用場景 ### 消息隊列 跟大多數的消息系統相比,Kafka有更好的吞吐量和容錯性,這讓Kafka成為了一個很好的大規模消息處理應用的解決方案。消息系統一般吞吐量相對較低,但是需要更小的端到端延時,而Kafka能提供這些保障。 ### 網頁行為跟蹤 Kafka的另一個應用場景是跟蹤用戶瀏覽頁面、搜索操作及其他用戶行為,以發布-訂閱的模式實時記錄到對應的話題中。這些結果被訂閱者拿到后就可以做進一步的處理。 ### 數據監控 Kafka也可以作為操作記錄的監控模塊來使用,即匯集記錄一些操作信息,對系統進行監控。 ### 日志聚合 日志聚合一般來說是從服務器上收集日志文件,然后放到一個集中的位置進行處理。然而Kafka忽略掉文件的細節,將其更清晰地抽象成一個個日志或事件的消息流。這就讓Kafka處理過程延遲更低,更容易支持多數據源和分布式數據處理。比起以日志為中心的系統比如Scribe或者Flume來說,Kafka提供同樣高效的性能和因為冗余達到的更高的可用性保證,以及更低的端到端延遲。 ### 流式處理 這是Kafka的一個重要應用場景。保存收集流數據,以提供給之后對接的Storm或其他流式計算框架進行處理。很多用戶會對那些從原始話題來的數據進行階段性處理、匯總、擴充或者以其他的方式轉換到新的話題下再繼續后面的處理。 ### 事件源 事件源是一種應用程序設計的方式,該方式的狀態轉移被記錄為按時間順序排序的記錄序列。Kafka可以存儲大量的日志數據,這使得它成為一個對這種方式的應用來說絕佳的后臺。 ### 持久性日志 Kafka可以為一種外部的持久性日志的分布式系統提供服務。這種日志可以在節點間備份數據,并為故障節點數據回復提供一種重新同步的機制。Kafka中日志壓縮功能為這種用法提供了條件。在這種用法中,Kafka類似于Apache BookKeeper項目。 ### 總結 這篇文章主要介紹了Apache Kafka中的幾個基本概念,及其應用場景。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看