起首從kafka若何創立一個topic來最先:
- 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接口即可:
- /**
- * Compute the partition for the given record.
- *
- * @param topic The topic name
- * @param key The key to partition on (or null if no key)
- * @param keyBytes serialized key to partition on (or null if no key)
- * @param value The value to partition on or null
- * @param valueBytes serialized value to partition&運彩版pttnbsp;on or null
- * @param cluster The current cluster metadata
- */
- public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes,&n捕魚達人-遊戲bsp;Cluster cluster) {
- List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
- int numPartitions = partitions.size();
- if (keyBytes == null) {
- int nextValue = nextValue(topic);
- List<PartitionInfo> availablePartitions = cluster.availablePartitionsForTopic(topic);
- if (availablePartitions.size() > 0) {
- 地下539開獎int part = Utils.toPositive(nextValue) % availablePartitions.size();
- return availablePartitions.get(part).partition();
- } else {
- // no partitions are available, give a non-available partition
- return Utils.toPositive(nextVa大樂透獎金分配lue) % numPartitions;
- }
- } else {
- // hash the keyBytes to choose a partition
- return Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
- }
- }
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
【免責聲明】本站內容轉載自互聯網,其相關談吐僅代表作者小我私家概念盡非權勢巨子,不代表本站態度。如您發明內容存在版權成績,請提交相關鏈接至郵箱:,咱們將實時予以處置。
|