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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                * Partition * 一個Topic包含多個分區,默認按Key Hash分區 * 每個Partition對應一個文件夾`<topic_name>-<partition_id>` * 每個Partition被視為一個有序的日志文件(LogSegment) * <mark>Replication策略是基于Partition,而不是Topic</mark> * <mark>每個Partition都有一個Leader,0或多個Followers</mark> 一個 Topic 包含多個 Partition,Topic 是邏輯概念,而 Partition 則是物理上的概念。Topic 與 Partition 的關系如下圖所示。 :-: ![](https://img.kancloud.cn/b0/84/b084ddded4d319c3fbdf144168798017_1043x375.png) Topic 與 Partition 的關系 <br/> Partition 將 Topic 進行分割,從而更好地將數據均勻分布在 Kafka 集群的每一個 Broker 中。在 server.properties 配置文件中可以指定一個全局的分區數設置,這是對每個主題下的分區數的默認設置,默認為 1 (num.partitions=1)。當然每個主題也可以自己設置分區數量,如果創建主題的時候沒有指定分區數量,則會使用 server.properties 中的設置。例如: ```shell [root@hadoop101 /]# bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic my-topic --partitions 2 --replication-factor 1 ``` <br/> Kafka 通過一些算法盡可能將 Partition 分配到不同的 Broker 上,這樣就帶來兩個問題: **1.生產數據時,生產者數據發往哪個分區?** (1)如果給定了分區號,直接將數據發往指定的分區。 (2)如果沒有給定分區號,視消息的 key 值,通過 key 值取 hashcode 進行分區。 (3)如果即沒有給定分區號,也沒有 key 值,則直接輪詢分區。 <br/> 最后,還可以指定自定義分區類。 (1)當分區按每條消息來到順序輪詢依次寫入各分區時:kafka 會把收到的message 進行 load balance,均勻的分布在這個 topic 下的不同的 partition 上 ( `hash(message) % [broker 數量]` )。 <br/> (2)每個 partition 在內存中對應一個 index,記錄每個 segment 中的第一條消息偏移。 segment file 組成:由 2 大部分組成,分別為 index file 和 data file,此 2 個文件一一對應,成對出現,后綴`.index`和`.log`分別表示為 segment 索引文件、數據文件。segment 文件命名規則:partition 全局的第一個 segment 從 0 開始,后續每個segment 文件名為上一個全局 partition 的最大 offset(偏移 message 數)。數值最大為 64 位 long 大小,19 位數字字符長度,沒有數字用 0 填充。 <br/> (3)一個 partition 只能被一個消費者消費(但一個消費者可以同時消費多partition),因此,如果設置的 partition 的數量小于 consumer 的數量,就會有消費者消費不到數據。所以,推薦 partition 的數量一定要大于同時運行的consumer 的數量。 <br/> **2.消費數據時,消費者消費哪個分區的數據?如下圖所示。** :-: ![](https://img.kancloud.cn/c9/84/c98497082a6d76bd8ed0dd8716d57d88_1033x319.png) 消費者與分區 記住,同一時刻,<mark>一個分區只能被消費組中的一個消費者消費</mark>。如果消費者組中的消費者大于等于分區數量,則有一些消費者是多余的。但如果消費組中的消費者小于分區數量,則一個消費者將負責多個分區的消費,此時由 Consumer的`partition.assignment.strategy` 配置參數決定每個消費者可以消費哪些分區,可選策略包括:range(默認)、roundrobin。 <br/> <mark>(1)range 策略</mark> range 策略對應的實現類是 org.apache.kafka.clients.consumer.RangeAssignor。 具體規則是分區順序排序,消費者按照字母排序。partition 的個數除以消費者線程的總數來決定每個消費者線程消費幾個分區。如果除不盡,那么前面幾個消費者線程將會多消費一個分區。 ``` 例如:假設有 3 個消費者 11 個分區。 C1-0 將消費 0, 1, 2, 3 分區。 C1-2 將消費 4, 5, 6, 7 分區 。 C1-3 將消費 8, 9, 10 分區。 ``` <br/> <mark>(2)roundrobin 策略</mark> roundronbin 分配策略的具體實現是org.apache.kafka.clients.consumer.RoundRobinAssignor。 ```java props.put("partition.assignment.strategy", "org.apache.kafka.clients.consumer.RoundRobinAssignor"); ``` 分區按照 hashcode 排序,消費者按照字母排序。 ``` 例如:假設有 3 個消費者 11 個分區。 C1-0 將消費 0, 3, 6, 9 分區 。 C1-2 將消費 1, 4, 7, 10 分區 。 C1-3 將消費 2, 5, 8 分區。 ```
                  <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>

                              哎呀哎呀视频在线观看