點擊右邊

Kafka源碼闡發及圖解道理之Broker金禾娛樂城評價 端

 
起首從kafka若何創立一個topic來最先:

  1. kafka-topics –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic test 

個中有這么幾個參數:

  • –zookeeper:zookeeper的地址
  • –replication-factor:正本因子
  • –partitions:分區個數(默許是1)
  • –topic:topic稱號

二.甚么是分區
一個topic可以有多個分區,每個分區的新聞都是不同的。 固然分區可以供應更高的吞吐量,然則分區不是越多越好。一般分區數不要跨越kafka集群的機械數目。分區越多占用的內存以及文件句柄。 一般分區配置為3-10個。譬如目前集群有3個機械,要創立一個名為test的topic,分區數為2,那末如圖:

partiton都是有序切次序弗成變的記載集,而且賡續追加到log文件,partition中的每一個新聞都歸調配一個id,也便是offset(偏移量),offset用來標志分區的一筆記錄 ,這里就用官網的圖了,我畫的欠好:

2.1 producer端以及分區瓜葛
就圖上的環境,producer端會把mq給哪一個分區呢?這也是上一節咱們提到的一個參數partitioner.class。 默許分區器的處置是:有key則用murmur2算法計算key的哈希值,對總分區取模算出分區號,無key則輪詢。(org.apache.kafka.clients.producer.internals.DefaultPartitioner#partition)。當然了咱們也能夠自界說分區戰略,只需完成org.apache.kafka.clients.producer.Partitioner接口即可:

  1. /** 
  2.  * Compute the partition for the given record. 
  3.  * 
  4.  * @param topic The topic name 
  5.  * @param key The key to partition on (or null if no key) 
  6.  * @param keyBytes serialized key to partition on (or null if no key) 
  7.  * @param value The value to partition on or null 
  8.  * @param valueBytes serialized value to partition&運彩版pttnbsp;on or null 
  9.  * @param cluster The current cluster metadata 
  10.  */ 
  11.  public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes,&n捕魚達人-遊戲bsp;Cluster cluster) { 
  12.  List<PartitionInfo> partitions = cluster.partitionsForTopic(topic); 
  13.  int numPartitions = partitions.size(); 
  14.  if (keyBytes == null) { 
  15.  int nextValue = nextValue(topic); 
  16.  List<PartitionInfo> availablePartitions = cluster.availablePartitionsForTopic(topic); 
  17.  if (availablePartitions.size() > 0) { 
  18.  地下539開獎int part = Utils.toPositive(nextValue) % availablePartitions.size(); 
  19.  return availablePartitions.get(part).partition(); 
  20.  } else { 
  21.  // no partitions are available, give a non-available partition 
  22.  return Utils.toPositive(nextVa大樂透獎金分配lue) % numPartitions; 
  23.  } 
  24.  } else { 
  25.  // hash the keyBytes to choose a partition 
  26.  return Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions; 
  27.  } 
  28.  } 

2.2 consumer端以及分區瓜葛
先來望下官網關于花費組的界說:Consumers label themselves with a consu妞妞鐵支mer group name, and each record published to a topic is delivered to one consumer instance within each subscribing consumer group.
翻譯:花費者使用一個花費者組名來標志本人,一個topic的新聞會被發送到訂閱它的花費者組的 一個 花費者實例上。
consumer group是用于完成高伸縮性,高容錯性的consumer機制。若是有consumer掛了或者者新增一個consumer,consumer group會進行重均衡(rebalance),重均衡機制會在consumer篇詳細講授,本節不講。那末按照下面的圖持續畫花費者端:

這里是最佳的環境,2個partition對應1個group中的2個consumer。那末思索,若是一個花費組的花費者大于分區數呢?或者者小于分區數呢?
若是一個花費組的花費者大于分區數,那末相稱于過剩的花費者是一種鋪張,過剩的花費者將沒法花費新聞。

六合彩539
【免責聲明】本站內容轉載自互聯網,其相關談吐僅代表作者小我私家概念盡非權勢巨子,不代表本站態度。如您發明內容存在版權成績,請提交相關鏈接至郵箱:,咱們將實時予以處置。