ä¸ãè¿æ¥zk
ç±äºkafkaçåç§å æ°æ®é½åå¨å¨zkï¼è¦è¿æ¥kafkaé群ä¹è¦éè¿zkè·åå个brokerçip端å£ç¶åè¿æ¥brokerãå æ¤ï¼å¤§å¤æ°kafkaèªå¸¦çè¿ç»´å½ä»¤é½è¦æå®zkçå°åï¼æ¯å¦ç¨kafka-topicsååºæætopicsï¼
kafka-topics --zookeeper localhost:2181/kafka --list
--zookeeperåæ°æ¯å¿
é¡»æå®çãå¦å¤ï¼å¦ækafkaé群å¯å¨çæ¶åå¨é
ç½®æä»¶ä¸æå®äºnamespaceï¼è®°å¾è¦å¨zkçå°ååé¢ä¹è¦å ä¸kafkaæå±çnamespaceãå¦åkafkaå°±æ¾ä¸å°kafkaé群çç¸å
³å
æ°æ®äºã
ç±äºkafkaçå
æ°æ®é½åå¨å¨zkï¼å æ¤ææ¡å¥½å¦ä½æ¥çzkçæ°æ®ä¹æ¯è¿ç»´kafkaé群çä¸ä¸ªå
³é®ã
zkCli å½ä»¤
zookeeperå®è£
å
ä¸è¬é½ä¼æä¾zkCliå½ä»¤æ¥è®©ç¨æ·è¿æ¥zookeeperé群ã
./zkCli.sh -timeout 5000 -r -server ip:port
ä¹åè¿å
¥zkç交äºçé¢ï¼å°±å¯ä»¥è¾åºç¸å
³å½ä»¤æ¥çzkçæ°æ®äºã
# æ¥çkafkaéç¾¤ä¸ææçbrokers idå表
ls /brokers/ids
# æ¥ç 1003 brokerçä¿¡æ¯
get /brokers/ids/1003
å
¶ä»zk交äºçé¢çå½ä»¤è¿éä¸å¤åä»ç»ï¼zkCliçå¸®å©ææ¡£å·²ç»åç徿¸
æ¥äºã
äºãtopic ç¸å
³
kafka-topicså¯ä»¥è¿è¡åtopicsç¸å
³çä¸äºæä½ãä¸é¢ä»ç»ä¸ä¸å¦ä½è¿ç¨è¯¥å½ä»¤æ¥æä½kafka topicsã
该å½ä»¤æç»æ¯è°ç¨kafkaæºç ä¸çTopicCommandç±»æ¥å®ç°çã
ååºææçtopic & è·åå½ä»¤å¸®å©
# ååºå¸®å©ææ¡£ï¼è±æå¥½çåå¦åºæ¬çå¸®å©ææ¡£å°±å¯ä»¥æå®å¤§æ¦æä¹ä½¿ç¨è¯¥å½ä»¤äº
kafka-topics --help
# ååºkafkaé群ä¸çæætopicsï¼è¿ééè¦æå®kafkaæºå¨å
æ°æ®å卿å¨çzkæºå¨å°åï¼è®°å¾å¦æænamespaceï¼è¦ä¹å ä¸ï¼å¦åå°è¿ä¸ä¸kafkaé群
kafka-topics --zookeeper localhost:2181/kafka --list
å建topic
# å建ä¸ä¸ªtopic为testçtopicï¼å¹¶æå®ååºæ°ä¸º5ï¼å¯æ¬æ°ä¸º1ãè¿éç坿¬æ°ä¸è½è¶
è¿brokerçæ°éï¼å¦å伿¥é
kafka-topics --topic test --zookeeper localhost:2181/kafka --create --replication-factor 1 --partitions 5
# åå»ºæ¶æå®å¯æ¬å¨åªä¸ªbrokerä¸,å¤ä¸ªpartitionä¹é´ç¨éå·åéï¼å¯æ¬ä¹é´ç¨":"åå²ï¼ç¬¬ä¸ä¸ªå¯æ¬é»è®¤æ¯leader
kafka-topics.sh --zookeeper 172.19.0.5:2181 --topic lyt2 --create --replica-assignment 1001:1002,1001:1002,1001:1002
ååºæætopicç详æ
éè¿ --describe åæ°å¯ä»¥ååºæä»¬æå®çtopics详æ
ï¼å
æ¬ partitionsãleaderãreplicasãisrçã
kafka-topics --zookeeper localhost:2181/kafka --describe test test_yangjb
Topic:test PartitionCount:5 ReplicationFactor:3 Configs:
Topic: test Partition: 0 Leader: 1001 Replicas: 1001,1002,1003 Isr: 1002,1001,1003
Topic: test Partition: 1 Leader: 1002 Replicas: 1002,1003,1001 Isr: 1002,1003,1001
Topic: test Partition: 2 Leader: 1003 Replicas: 1003,1001,1002 Isr: 1002,1001,1003
Topic: test Partition: 3 Leader: 1001 Replicas: 1001,1003,1002 Isr: 1002,1001,1003
Topic: test Partition: 4 Leader: 1002 Replicas: 1002,1001,1003 Isr: 1002,1001,1003
ä¸é¢æ¯ä¸äº 使ç¨âdescribeæ¶å¯ä»¥ä½¿ç¨çå
¶ä»åæ°
# åªååºä¿®æ¹äºé»è®¤é
ç½®çé£äºtopicãå¹¶å¯ä»¥æ¥çä¿®æ¹äºåªäºtopicé
ç½®
--topics-with-overrides
# ååºé£äºç®å没æleaderçtopic
--under-replicated-partitions
# ååºé£äºæ£å¨åæ¥çtopicæè
忥åºç°å¼å¸¸çtopic
--under-replicated-partitions
å é¤topic
注æï¼kafkaå é¤topicæ¯å¼æ¥çï¼å æ¤å¹¶ä¸æ¯å½ä»¤è¿åäºtopic就已ç»è¢«æåå é¤ãèæ¯çå¾
åå°çå é¤ä»»å¡æ§è¡æåæçæ£å é¤è¯¥topicã
kafka-topics --zookeeper localhost:2181/kafka --delete --topic yangjb_test
ä¿®æ¹topicç¸å
³ä¿¡æ¯
éè¿ --alter åæ°å¯ä»¥ä¿®æ¹topicçä¿¡æ¯ï¼è½ä¿®æ¹çä¿¡æ¯å
æ¬ partitionæ°éãreplicaåé
æ
åµãtopicé
ç½®ã妿è¦ä¿®æ¹ partitionæ°éæ¶ï¼ä¿®æ¹çåçæ°éä¸å®è¦æ¯å½åçæ°é大ï¼å¦å伿¥éã
# å°partitionæ°éä¿®æ¹æ7个
kafka-topics --zookeeper localhost:2181/kafka --topic test --alter --partitions 7
# éè¿ --replica-assignment åæ°æå®æ°å¢partitionç坿¬å叿
åµ
# 妿åå
çpartitionæ°éæ¯3ï¼é£ä¹æ°å¢çä¸ä¸ªååºç坿¬åå¸åºè¯¥å¨1002å1003
kafka-topics --zookeeper localhost:2181/kafka --topic test -alter --partitions 4 --replica-assignment 1001:1002,1001:1002,1001:1002,1002:1003
# ä¿®æ¹topic testçé
ç½® flush.ms =30000 ã
kafka-topics --zookeeper localhost:2181/kafka --topic test --alter --config flush.ms=30000
# å é¤topic testç flush.ms é
ç½®
kafka-topics --zookeeper localhost:2181/kafka --topic test --alter --delete-config flush.ms
注æï¼å¨åç»çkafkaçæ¬ä¸ï¼å
³äºtopicçé
ç½®çä¿®æ¹å é¤å¯è½ä¼è¢«ç§»å°kafka-configs.shä¸ã宿¹å»ºè®®ä½¿ç¨kafka-configsæ¥ä¿®æ¹topicçé
ç½®ã
ä¸ãååºå¯æ¬éåé
卿°æ®é大çæ
åµä¸ï¼å个brokerä¸çæ°æ®éç»å¸¸ä¼ä¸ä¸è´ï¼æçbroker䏿°æ®éå¸¸å¤§ï¼æçåå¾å°ï¼ä¸ºäºè®©æ°æ®æ´ååçåå¸å¨å个brokerï¼æä»¬å°±è¦å¦ä¼å¯¹topicçpartionè¿è¡ååºå¯æ¬éåé
ã
é¦å
建ç«ä¸ä¸ªjsonæä»¶ï¼ç¨æ¥æè¿°å¦ä½åé
ååºå¯æ¬ã
assign.jsonï¼
"partitions": [
"topic": "test",
"partition": 1,
"replicas": [
1002,
"topic": "test",
"partition": 2,
"replicas": [
1003,
"version": 1
æä»¶ä¸åªè¦æå®è¦éæ°åé
坿¬çååºå·å°±å¯ä»¥ï¼ä¸éè¦ååºææååºã
æäº¤ååºå¯æ¬éåé
ä»»å¡ï¼
# --execute åæ°è¡¨ç¤ºæ§è¡
kafka-reassign-partitions --zookeeper localhost:2181/kafka --reassignment-json-file assign.json --execute
# --verify åæ°è¡¨ç¤ºæ¥çååºå¯æ¬éåé
ä»»å¡çæ§è¡ç¶æ
kafka-reassign-partitions --zookeeper localhost:2181/kafka --reassignment-json-file assign.json --verify
让系ç»èªå¨å¸®æä»¬çæéåé
jsonæä»¶ï¼
æ§è¡å½ä»¤ä¹åéè¦å»ºç«ä¸ä¸ªjsonæä»¶ï¼åè¯ç³»ç»è¦éåé
åªäºååº:
gen.json:
"topics": [
"topic": "foo"
"version": 1
æ¥çæ§è¡å½ä»¤
# --generate 表示çæéåé
çjsonæä»¶
# --topics-to-move-json-file æå®è¦éåé
åªäºtopic
# --broker-list 表示è¦åé
å°åªäºbrokerä¸å»
kafka-reassign-partitions --zookeeper localhost:2181/kafka --generate --topics-to-move-json-file gen.json --broker-list 1001,1002,1003
# æå®éåé
æ¶ï¼å¨ä¸ä¸ªbrokerä¸ï¼å个æ¥å¿ç®å½ä¹é´å¤å¶æ°æ®çéå¼ï¼æä½è¦æ± 1 KB/s
# 妿éåé
任塿£å¨è¿è¡ï¼ç¬¬äºæ¬¡æ§è¡ä¼ä¿®æ¹åæ¥è®¾ç½®çéå¼
--replica-alter-log-dirs
# æå®éåé
æ¶ï¼å¨ä¸åbrokerä¹é´ä¼ è¾æ°æ®çéå¼ï¼æä½è¦æ± 1 KB/s
# 妿éåé
任塿£å¨è¿è¡ï¼ç¬¬äºæ¬¡æ§è¡ä¼ä¿®æ¹åæ¥è®¾ç½®çéå¼
--throttle
# çå¾
éåé
ä»»å¡å¼å§çè¶
æ¶æ¶é´
--timeout
ååºå¯æ¬éåé
è¿ç¨
详æ
å¯ä»¥çkafkaæºç çKafkaController#onPartitionReassignment()çæ¹æ³æ³¨è§£ã
RAR = Reassigned replicasï¼ç®æ è¦åé
ç坿¬æ
åµ
OAR = Original list of replicas for partitionï¼åå
ç坿¬åé
æ
åµ
AR = current assigned replicasï¼å½åç坿¬åé
æ
åµ
æ´æ°zkå¤çpartition坿¬é
ç½®ï¼AR=RAR+OAR
åææRAR+OARç坿¬åéå
æ°æ®æ´æ°è¯·æ±
å°æ°å¢çé£é¨åç坿¬ç¶æè®¾ç½®ä¸ºNewReplicaãä¹å°±æ¯ RAR-OAR é£é¨å坿¬
çå¾
ææç坿¬åleaderä¿æåæ¥ãä¹å°±æ¯æ±çRAR+OARç坿¬é½å¨isrä¸äº
å°ææå¨RARä¸ç坿¬ç¶æé½è®¾ç½®ä¸ºOnlineReplica
å¨å
åä¸å
å°AR=RAR
妿leaderä¸å¨RARä¸ï¼å°±éè¦éæ°ç«éleaderãéç¨ReassignedPartitionLeaderSelectoré举
å°ææåå¤ç§»é¤ç坿¬ç¶æè®¾ç½®ä¸ºOfflineReplicaãä¹å°±æ¯OAR-RARçé£é¨å坿¬ãè¿æ¶partitionçisr伿¶ç¼©
å°ææåå¤ç§»é¤ç坿¬ç¶æè®¾ç½®ä¸ºNonExistentReplicaãè¿æ¶æå¨çååºå¯æ¬æ°æ®ä¼è¢«å é¤ã
å°å
åä¸çARæ´æ°å°zk
æ´æ°zkç/admin/reassign_partitionsè·¯å¾ï¼ç§»é¤è¿ä¸ªpartition
åéæ°çå
æ°æ®å°å个brokerä¸
å设å½åæOAR = {1, 2, 3}ï¼ RAR = {4,5,6}ï¼å¨è¿è¡partition reaassignedçè¿ç¨ä¸ä¼åçå¦ä¸åå
leader/isr
åãå é¤æä¸ªpartitionçæ°æ®
使ç¨kafka-delete-recordså½ä»¤å¯ä»¥å 餿å®topic-partition卿å®offsetä¹åçæææ°æ®ã
该å½ä»¤æ¯kafkaå¨0.11çæ¬ä¹åææ¯æçã
é¦å
éè¦ç¼åå é¤offsetæè¿°jsonæä»¶ï¼
delete.json
"partitions": [
"topic": "test",
"partition": 0,
"offset": 24
"version": 1
ä¸é¢çjsonæä»¶è¡¨ç¤ºå é¤topicæ¯testç0å·paritionç24ä¹åçææoffsetï¼ä¹å°±æ¯1-23è¿äºoffsetçæ°æ®é½ä¼è¢«å 餿ã
kafka-delete-records --bootstrap-server 127.0.0.1:9092 --offset-json-file delete.json
äºãå
¨å±&topicé
置修æ¹
éè¿kafka-configså½ä»¤ï¼æä»¬å¯ä»¥ä¿®æ¹brokerçé
ç½®ï¼ä»¥åtopicçé
ç½®ãclientåuserçé
ç½®ã
é
ç½®æ´æ°åç
kafka-configså½ä»¤ä¿®æ¹é
ç½®åä¼è¢«åå°å¯¹åºçzookeeperçèç¹ä¸æä¹
åï¼ä¹åkafkaé群éå¯åè¿ä¼å è½½è¿äºé
ç½®ï¼å¹¶è¦çé
ç½®æä»¶çé£äºé
ç½®ãä¹å°±æ¯è¯´ï¼å¦æå¨æ¤å¤è®¾ç½®äºæä¸ªé
置项ï¼ä¹åå¨é
ç½®æä»¶ä¸å¯¹è¿ä¸ªé
ç½®é¡¹çæ¹å¨é½ä¸ä¼èµ·ä½ç¨ï¼å 为被è¦çäºã
ç¨è¯¥å½ä»¤ä¿®æ¹äºé
ç½®åï¼å¯ä»¥å¨zkçèç¹ä¸çå°å¯¹åºçé
ç½®å
容ã
èç¹ç®å½ä¸è¬æ¯ /config/entityType/entityName,entityTypeå¯ä»¥æ¯brokersãtopicsãusersãclientsãentityName表示å
·ä½çåç§°ï¼æ¯å¦brokerçidï¼topicçåç§°çã
æ¯å¦è¦ç0å·brokerä¿®æ¹è¿çé
置项ï¼å¯ä»¥å¨zk交äºçé¢ä¸è¾å
¥
# /kafka æ¯å½å空é´
get /kafka/config/brokers/0
ä¿®æ¹brokeré
ç½®
# å°0å·brokerçé
ç½® log.cleaner.backoff.msä¿®æ¹æ1000,flush.ms ä¹ä¿®æ¹æ1000
# --alter 表示è¦ä¿®æ¹é
置项
# --add-config åé¢è·çè¦ä¿®æ¹çé
置项
kafka-configs --bootstrap-server 127.0.0.1:9092 --entity-type brokers --entity-name 0 --add-config log.cleaner.backoff.ms=1000,flush.ms=1000 --alter
# å é¤0å·broker 对 log.cleaner.backoff.msçé
ç½®
kafka-configs --bootstrap-server 127.0.0.1:9092 --entity-type brokers --entity-name 0 --delete-config log.cleaner.backoff.ms --alter
# ååº0å·brokerä¿®æ¹è¿çé
置项
kafka-configs --bootstrap-server 127.0.0.1:9092 --entity-type brokers --entity-name 0 --describe
ä¿®æ¹topicçé
ç½®
# å°testè¿ä¸ªtopicç delete.retention.msä¿®æ¹æ1000,flush.ms ä¹ä¿®æ¹æ1000
kafka-configs --zookeeper 127.0.0.1:2181/kafka --entity-type topics --entity-name test --add-config delete.retention.ms=1000,flush.ms=1000 --alter
# å é¤testè¿ä¸ªtopicç delete.retention.msåflush.msé
置项
kafka-configs --zookeeper 127.0.0.1:2181/kafka --entity-type topics --entity-name test --delete-config delete.retention.ms,flush.ms --alter
# ååº testè¿ä¸ªtopicä¿®æ¹è¿çé
置项
kafka-configs --zookeeper 127.0.0.1:2181/kafka --entity-type topics --entity-name test --describe
ä¿®æ¹clientçé
ç½®
è¿éçclientæ¯æå®¢æ·ç«¯ï¼ä¹å°±æ¯produeræè
consumerã客æ·ç«¯æ¯æä¿®æ¹çé
ç½®æ
# 请æ±éå¶
request_percentage
# æ¨éæ¶æ¯æ¶çæµéæ§å¶
producer_byte_rate
# æ¶è´¹æ¶çæµéæ§å¶
consumer_byte_rate
éè¿æå®clientIdæä»¬å¯ä»¥æ§å¶æå®å®¢æ·ç«¯çé
ç½®ï¼ä»èæ§å¶ä»ä»¬çæµéä¸ä¼è¶
è¿æä»¬è®¾å®çå¼
# 设置 客æ·ç«¯id 为testç producer_byte_rateåconsumer_byte_rate为1024
kafka-configs --zookeeper 127.0.0.1:2181/kafka --alter --add-config 'producer_byte_rate=1024,consumer_byte_rate=1024' --entity-type clients --entity-name test
å
ãæ¥çbrokerä¸ç£ççä½¿ç¨æ
åµ
å¨0.11çæ¬ä¸ï¼æ°å¢ä¸ä¸ªå½ä»¤kafka-log-dirså¯ä»¥æ¥çbrokerçç£çä½¿ç¨æ
åµã
该å½ä»¤å¯ä»¥ä»ä¸¤ä¸ªç»´åº¦è§å¯ç£ççä½¿ç¨æ
åµï¼ä¸ä¸ªæ¯æå®broker idï¼æ¥ç该brokerçæ°æ®ç®å½çå个topic paritionçå ç¨å¤§å°ãè¿å¯ä»¥ç´æ¥æå®topicï¼æ¥çè¿äºtopicçpartitionå¨å个brokerä¸çä½¿ç¨æ
åµãçè³å¯ä»¥ä¸¤ä¸ªè¿æ»¤æ¡ä»¶ä¸èµ·ç¨ï¼åæ¶æå®brokerIdåtopicã
# æ¥ç0ã1å·brokerä¸å个topic partitionçç£çä½¿ç¨æ
åµ
kafka-log-dirs --bootstrap-server 127.0.0.1:9092 --broker-list 0,1 --describe
# æ¥çtopic:test å¨å个brokerä¸çç£çä½¿ç¨æ
åµ
kafka-log-dirs --bootstrap-server 127.0.0.1:9092 --topic-list test --describe
# æ¥çtopic test å¨0å·brokerä¸çç£çä½¿ç¨æ
åµ
kafka-log-dirs --bootstrap-server 127.0.0.1:9092 --topic-list test --broker-list 0 --describe
è¾åºç¤ºä¾ï¼
"version": 1,
"brokers": [
"broker": 1001,
"logDirs": [
"logDir": "/kafka/kafka-logs-7da01186c90a",
"error": null,
"partitions": [
"partition": "test-4",
"size": 0,
"offsetLag": 0,
"isFuture": false
"partition": "test-0",
"size": 0,
"offsetLag": 0,
"isFuture": false
ä¸ã使ç¨kafka-preferred-replica-electionè¿è¡leaderé举
彿们æ¥çæä¸ªtopic partitionæ¶ï¼ä¼è¾åºè¯¥partiton replicaçå表ï¼å
¶ä¸replicaå表ç第ä¸ä¸ªreplica被kafka称为preferred replicaã
Topic: test Partition: 0 Leader: 1002 Replicas: 1001,1002,1003 Isr: 1002,1001,1003
ä¸é¢çtest partition-0ä¸ï¼1001å°±æ¯é£ä¸ªpreferred replicaãå¨å¤§å¤æ
åµä¸ï¼preferred replicaä¸è¬å°±æ¯leaderï¼ä½æ¯æäºæ
åµå¯è½ä¸æ¯ãå æ¤ï¼kafkaæä¾äºkafka-preferred-replica-electionæ¥å°preferred replicaé举æleaderã
é¦å
æä»¬éè¦ç¼è¾prefered.json æä»¶ï¼
"partitions": [
"topic": "test",
"partition": 0