日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

kafka中partition的概念,解决kafka消费瓶颈

發布時間:2023/12/29 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 kafka中partition的概念,解决kafka消费瓶颈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近開發一個項目,需要遷移大數據量,所以用到kafka,但消費速度一直不快,部分java代碼如下

解釋:服務端用kafkaTemplate去發送數據

解釋:客戶端開15個接收端去消費數據

但是消費端一直速度很慢,最后經過我們領導的指點,發現kafka有個參數partition需要調優。

百度了下相關參數知識,總結如下:

1個partition只能被同組的一個consumer消費,同組的consumer則起到均衡效果

消費者多于partition

topic: test 只有一個partition

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

在g2組中啟動兩個consumer,

1. bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer.config config/consumer_g2.properties
2. bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer.config config/consumer_g2.properties

消費者數量為2大于partition數量1,此時partition和消費者進程對應關系如下:

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group g2
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
test 0 9 9 0 consumer-1-4a2a4aa8-32f4-4904-9c16-1c0bdf7128a2 /127.0.0.1 consumer-1
- - - - - consumer-1-fd7b120f-fd21-4e07-8c23-87b71c1ee8a5 /127.0.0.1 consumer-1

備注:消費者consumer-1-fd7b120f-fd21-4e07-8c23-87b71c1ee8a5無對應的partition。

用圖表示為

如上圖,向test發送消息:1,2, 3,4,5,6,7,8,9
只有C1能接收到消息,C2則不能接收到消息,即同一個partition內的消息只能被同一個組中的一個consumer消費。當消費者數量多于partition的數量時,多余的consumer消費者空閑。
也就是說如果kafka配置里只配了一個partition,你在同一組topic里啟動多少個consumer都沒用,partition的數量決定了消費者consumer在此topic中被均衡的程度。例如partition=4,則在同一組中最多被4個consumer均衡消費。

消費者少于和等于partition

topic:test2包含3個partition

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic test2

開始時,在g3組中啟動2個consumer,

1.bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test2 --from-beginning --consumer.config config/consumer_g3.properties
2.bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test2 --from-beginning --consumer.config config/consumer_g3.properties

則對應關系如下:

TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
test2 0 8 8 0 consumer-1-8b872ef7-a2f0-4bd3-b2a8-7b26e4d8ab2c /127.0.0.1 consumer-1
test2 1 7 7 0 consumer-1-8b872ef7-a2f0-4bd3-b2a8-7b26e4d8ab2c /127.0.0.1 consumer-1
test2 2 8 8 0 consumer-1-f362847d-1094-4895-ad8b-1e1f1c88936c /127.0.0.1 consumer-1

其中,consumer-1-8b872ef7-a2f0-4bd3-b2a8-7b26e4d8ab2c對應了2個partition

用圖表示為:

消費者數量2小于partition的數量3,此時,向test2發送消息1,2,3,4,5,6,7,8,9
C1接收到1,3,4,6,7,9
C2接收到2,5,8
此時P1、P2對對應C1,即多個partition對應一個消費者,C1接收到消息量是C2的兩倍

然后,在g3組中再啟動一個消費者,使得消費者數量為3等于topic2中partition的數量

3.bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test2 --from-beginning --consumer.config config/consumer_g3.properties

對應關系如下:

TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
test2 0 8 8 0 consumer-1-8b872ef7-a2f0-4bd3-b2a8-7b26e4d8ab2c /127.0.0.1 consumer-1
test2 1 7 7 0 consumer-1-ab472ed5-de11-4e56-863a-67bf3a3cc36a /127.0.0.1 consumer-1
test2 2 8 8 0 consumer-1-f362847d-1094-4895-ad8b-1e1f1c88936c /127.0.0.1 consumer-1

此時,partition和消費者是一對一關系,向test2發送消息1,2,3,4,5,6,7,8,9
C1接收到了:2,5,8
C2接收到了:3,6,9
C3接收到了:1,4,7
C1,C2,C3均分了test2的所有消息,即消息在同一個組之間的消費者之間均分了。

參考網址:https://www.cnblogs.com/sa-dan/p/8080197.html

總結

以上是生活随笔為你收集整理的kafka中partition的概念,解决kafka消费瓶颈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。