## Kafka
* [1.为ä»ä¹è¦ä½¿ç¨ kafkaï¼ä¸ºä»ä¹è¦ä½¿ç¨æ¶æ¯éåï¼](#1为ä»ä¹è¦ä½¿ç¨-kafka为ä»ä¹è¦ä½¿ç¨æ¶æ¯éå)
* [2.Kafkaä¸çISRãARå代表ä»ä¹ï¼ISRç伸缩åæä»ä¹ï¼](#2kafkaä¸çisrarå代表ä»ä¹isrç伸缩åæä»ä¹)
* [3.kafkaä¸çbroker æ¯å¹²ä»ä¹çï¼](#3kafkaä¸çbroker-æ¯å¹²ä»ä¹ç)
* [4.kafkaä¸ç zookeeper èµ·å°ä»ä¹ä½ç¨ï¼å¯ä»¥ä¸ç¨zookeeperä¹ï¼](#4kafkaä¸ç-zookeeper-èµ·å°ä»ä¹ä½ç¨å¯ä»¥ä¸ç¨zookeeperä¹)
* [5.kafka followerå¦ä½ä¸leaderåæ¥æ°æ®ï¼](#5kafka-followerå¦ä½ä¸leaderåæ¥æ°æ®)
* [6.ä»ä¹æ
åµä¸ä¸ä¸ª broker ä¼ä» ISR ä¸è¢«è¸¢åºå»ï¼](#6ä»ä¹æ
åµä¸ä¸ä¸ª-broker-ä¼ä»-isr-ä¸è¢«è¸¢åºå»)
* [7.kafka 为ä»ä¹é£ä¹å¿«ï¼](#7kafka-为ä»ä¹é£ä¹å¿«)
* [8.kafka producerå¦ä½ä¼åæå
¥é度ï¼](#8kafka-producerå¦ä½ä¼åæå
¥é度)
* [9.kafka producer ææ°æ®ï¼ack 为 0ï¼ 1ï¼ -1 çæ¶å代表å¥ï¼ 设置 -1 çæ¶åï¼ä»ä¹æ
åµä¸ï¼leader ä¼è®¤ä¸ºä¸æ¡æ¶æ¯ commit äº](#9kafka-producer-ææ°æ®ack--为-0-1--1-çæ¶å代表å¥-设置--1-çæ¶åä»ä¹æ
åµä¸leader-ä¼è®¤ä¸ºä¸æ¡æ¶æ¯-commit-äº)
* [10.kafka unclean é
置代表å¥ï¼ä¼å¯¹ spark streaming æ¶è´¹æä»ä¹å½±åï¼](#10kafka--unclean-é
置代表å¥ä¼å¯¹-spark-streaming-æ¶è´¹æä»ä¹å½±å)
* [11.妿leader crashæ¶ï¼ISR为空æä¹åï¼](#11妿leader-crashæ¶isr为空æä¹å)
* [12.kafkaçmessageæ ¼å¼æ¯ä»ä¹æ ·çï¼](#12kafkaçmessageæ ¼å¼æ¯ä»ä¹æ ·ç)
* [13.kafkaä¸consumer group æ¯ä»ä¹æ¦å¿µï¼](#13kafkaä¸consumer-group-æ¯ä»ä¹æ¦å¿µ)
* [14.Kafkaä¸çæ¶æ¯æ¯å¦ä¼ä¸¢å¤±åé夿¶è´¹ï¼](#14kafkaä¸çæ¶æ¯æ¯å¦ä¼ä¸¢å¤±åé夿¶è´¹)
* [15.为ä»ä¹Kafka䏿¯æè¯»åå离ï¼](#15为ä»ä¹kafka䏿¯æè¯»åå离)
* [16.Kafka䏿¯æä¹ä½ç°æ¶æ¯é¡ºåºæ§çï¼](#16kafka䏿¯æä¹ä½ç°æ¶æ¯é¡ºåºæ§ç)
* [17.kafkaå¦ä½å®ç°å»¶è¿éåï¼](#17kafkaå¦ä½å®ç°å»¶è¿éå)
* [18.ä»ä¹æ¯æ¶è´¹è
ç»?](#18ä»ä¹æ¯æ¶è´¹è
ç»)
* [19.è§£éä¸ Kafka ä¸ä½ç§»(offset)çä½ç¨ã](#19è§£éä¸-kafka-ä¸ä½ç§»offsetçä½ç¨)
* [20.éè¿°ä¸ Kafka ä¸çé¢å¯¼è
坿¬(Leader Replica)å追éè
坿¬ (Follower Replica)çåºå«ã](#20éè¿°ä¸-kafka-ä¸çé¢å¯¼è
坿¬leader-replicaå追éè
坿¬-follower-replicaçåºå«)
* [21.å¦ä½è®¾ç½® Kafka è½æ¥æ¶çæå¤§æ¶æ¯ç大å°?](#21å¦ä½è®¾ç½®-kafka-è½æ¥æ¶çæå¤§æ¶æ¯ç大å°)
* [22.çæ§ Kafka çæ¡æ¶é½æåªäº?](#22çæ§-kafka-çæ¡æ¶é½æåªäº)
* [23.Broker ç Heap Size å¦ä½è®¾ç½®ï¼](#23broker-ç-heap-size-å¦ä½è®¾ç½®)
* [24.å¦ä½ä¼°ç® Kafka éç¾¤çæºå¨æ°é?](#24å¦ä½ä¼°ç®-kafka-éç¾¤çæºå¨æ°é)
* [25.Leader æ»æ¯ -1ï¼æä¹ç ´?](#25leader-æ»æ¯--1æä¹ç ´)
* [26.LEOãLSOãARãISRãHW é½è¡¨ç¤ºä»ä¹å«ä¹?](#26leolsoarisrhw-é½è¡¨ç¤ºä»ä¹å«ä¹)
* [27.Kafka è½æå¨å 餿¶æ¯å?](#27kafka-è½æå¨å 餿¶æ¯å)
* [28.consumer_offsets æ¯åä»ä¹ç¨ç?](#28consumer_offsets-æ¯åä»ä¹ç¨ç)
* [29.ååº Leader é举çç¥æå ç§?](#29ååº-leader-é举çç¥æå ç§)
* [30.Kafka çåªäºåºæ¯ä¸ä½¿ç¨äºé¶æ·è´(Zero Copy)?](#30kafka-çåªäºåºæ¯ä¸ä½¿ç¨äºé¶æ·è´zero-copy)
* [31.å¦ä½è°ä¼ Kafka?](#31å¦ä½è°ä¼-kafka)
* [32.Controller åçç½ç»ååº(Network Partitioning)æ¶ï¼Kafka 伿乿 ·?](#32controller-åçç½ç»ååºnetwork-partitioningæ¶kafka-伿乿 ·)
* [33.Java Consumer 为ä»ä¹éç¨åçº¿ç¨æ¥è·åæ¶æ¯?](#33java-consumer-为ä»ä¹éç¨åçº¿ç¨æ¥è·åæ¶æ¯)
* [34.ç®è¿° Follower 坿¬æ¶æ¯åæ¥ç宿´æµç¨ã](#34ç®è¿°-follower-坿¬æ¶æ¯åæ¥ç宿´æµç¨)
* [åèèµæ](#åèèµæ)
#### 1.为ä»ä¹è¦ä½¿ç¨ kafkaï¼ä¸ºä»ä¹è¦ä½¿ç¨æ¶æ¯éåï¼
ç¼å²ååå³°ï¼ä¸æ¸¸æ°æ®æ¶æçªåæµéï¼ä¸æ¸¸å¯è½æä¸ä½ï¼æè
䏿¸¸æ²¡æè¶³å¤å¤çæºå¨æ¥ä¿è¯åä½ï¼kafkaå¨ä¸é´å¯ä»¥èµ·å°ä¸ä¸ªç¼å²çä½ç¨ï¼ææ¶æ¯æåå¨kafkaä¸ï¼ä¸æ¸¸æå¡å°±å¯ä»¥æç
§èªå·±çèå¥è¿è¡æ
¢æ
¢å¤çã
è§£è¦åæ©å±æ§ï¼é¡¹ç®å¼å§çæ¶åï¼å¹¶ä¸è½ç¡®å®å
·ä½éæ±ãæ¶æ¯éåå¯ä»¥ä½ä¸ºä¸ä¸ªæ¥å£å±ï¼è§£è¦éè¦çä¸å¡æµç¨ãåªéè¦éµå®çº¦å®ï¼éå¯¹æ°æ®ç¼ç¨å³å¯è·åæ©å±è½åã
åä½ï¼å¯ä»¥éç¨ä¸å¯¹å¤çæ¹å¼ï¼ä¸ä¸ªç产è
å叿¶æ¯ï¼å¯ä»¥è¢«å¤ä¸ªè®¢é
topicçæå¡æ¶è´¹å°ï¼ä¾å¤ä¸ªæ¯«æ å
³èçä¸å¡ä½¿ç¨ã
å¥å£®æ§ï¼æ¶æ¯éåå¯ä»¥å 积请æ±ï¼æä»¥æ¶è´¹ç«¯ä¸å¡å³ä½¿çæ¶é´æ»æï¼ä¹ä¸ä¼å½±å主è¦ä¸å¡çæ£å¸¸è¿è¡ã
弿¥éä¿¡ï¼å¾å¤æ¶åï¼ç¨æ·ä¸æ³ä¹ä¸éè¦ç«å³å¤çæ¶æ¯ãæ¶æ¯éåæä¾äºå¼æ¥å¤çæºå¶ï¼å
è®¸ç¨æ·æä¸ä¸ªæ¶æ¯æ¾å
¥éåï¼ä½å¹¶ä¸ç«å³å¤çå®ãæ³åéå䏿¾å
¥å¤å°æ¶æ¯å°±æ¾å¤å°ï¼ç¶åå¨éè¦çæ¶ååå»å¤çå®ä»¬ã
#### 2.Kafkaä¸çISRãARå代表ä»ä¹ï¼ISRç伸缩åæä»ä¹ï¼
ISR:In-Sync Replicas 坿¬åæ¥éå
AR:Assigned Replicas ææå¯æ¬
ISRæ¯ç±leaderç»´æ¤ï¼followerä»leaderåæ¥æ°æ®æä¸äºå»¶è¿ï¼å
æ¬å»¶è¿æ¶é´replica.lag.time.max.msåå»¶è¿æ¡æ°replica.lag.max.messages两个维度, å½åææ°ççæ¬0.10.xä¸åªæ¯æreplica.lag.time.max.msè¿ä¸ªç»´åº¦ï¼ï¼ä»»æä¸ä¸ªè¶
è¿éå¼é½ä¼æfolloweråé¤åºISR, åå
¥OSRï¼Outof-Sync Replicasï¼åè¡¨ï¼æ°å å
¥çfollowerä¹ä¼å
åæ¾å¨OSRä¸ãAR=ISR+OSRã
#### 3.kafkaä¸çbroker æ¯å¹²ä»ä¹çï¼
broker æ¯æ¶æ¯ç代çï¼Producerså¾Brokerséé¢çæå®Topicä¸åæ¶æ¯ï¼Consumersä»Brokersé颿åæå®Topicçæ¶æ¯ï¼ç¶åè¿è¡ä¸å¡å¤çï¼brokerå¨ä¸é´èµ·å°ä¸ä¸ªä»£çä¿åæ¶æ¯çä¸è½¬ç«ã
#### 4.kafkaä¸ç zookeeper èµ·å°ä»ä¹ä½ç¨ï¼å¯ä»¥ä¸ç¨zookeeperä¹ï¼
zookeeper æ¯ä¸ä¸ªåå¸å¼çåè°ç»ä»¶ï¼æ©æçæ¬çkafkaç¨zkåmetaä¿¡æ¯åå¨ï¼consumerçæ¶è´¹ç¶æï¼groupç管ç以å offsetçå¼ãèèå°zkæ¬èº«çä¸äºå ç´ ä»¥åæ´ä¸ªæ¶æè¾å¤§æ¦çåå¨åç¹é®é¢ï¼æ°çæ¬ä¸éæ¸å¼±åäºzookeeperçä½ç¨ãæ°çconsumer使ç¨äºkafkaå
é¨çgroup coordinationåè®®ï¼ä¹åå°äºå¯¹zookeeperçä¾èµï¼ä½æ¯brokerä¾ç¶ä¾èµäºZKï¼zookeeper å¨kafkaä¸è¿ç¨æ¥é举controller å æ£æµbrokeræ¯å¦åæ´»ççã
#### 5.kafka followerå¦ä½ä¸leaderåæ¥æ°æ®ï¼
Kafkaçå¤å¶æºå¶æ¢ä¸æ¯å®å
¨ç忥å¤å¶ï¼ä¹ä¸æ¯å纯ç弿¥å¤å¶ãå®å
¨åæ¥å¤å¶è¦æ±All Alive Followeré½å¤å¶å®ï¼è¿æ¡æ¶æ¯æä¼è¢«è®¤ä¸ºcommitï¼è¿ç§å¤å¶æ¹å¼æå¤§çå½±åäºååçãè弿¥å¤å¶æ¹å¼ä¸ï¼Follower弿¥çä»Leaderå¤å¶æ°æ®ï¼æ°æ®åªè¦è¢«Leaderåå
¥log就被认为已ç»commitï¼è¿ç§æ
åµä¸ï¼å¦æleaderææï¼ä¼ä¸¢å¤±æ°æ®ï¼kafka使ç¨ISRçæ¹å¼å¾å¥½çåè¡¡äºç¡®ä¿æ°æ®ä¸ä¸¢å¤±ä»¥åååçãFollowerå¯ä»¥æ¹éçä»Leaderå¤å¶æ°æ®ï¼èä¸Leaderå
åå©ç¨ç£ç顺åºè¯»ä»¥åsend file(zero copy)æºå¶ï¼è¿æ ·æå¤§çæé«å¤å¶æ§è½ï¼å
鍿¹éåç£çï¼å¤§å¹
åå°äºFollowerä¸Leaderçæ¶æ¯éå·®ã
#### 6.ä»ä¹æ
åµä¸ä¸ä¸ª broker ä¼ä» ISR ä¸è¢«è¸¢åºå»ï¼
leaderä¼ç»´æ¤ä¸ä¸ªä¸å
¶åºæ¬ä¿æåæ¥çReplicaå表ï¼è¯¥å表称为ISR(in-sync Replica)ï¼æ¯ä¸ªPartitioné½ä¼æä¸ä¸ªISRï¼è䏿¯ç±leaderå¨æç»´æ¤ ï¼å¦æä¸ä¸ªfolloweræ¯ä¸ä¸ªleaderè½å太å¤ï¼æè
è¶
è¿ä¸å®æ¶é´æªåèµ·æ°æ®å¤å¶è¯·æ±ï¼åleaderå°å
¶éISRä¸ç§»é¤ ã
#### 7.kafka 为ä»ä¹é£ä¹å¿«ï¼
Cache Filesystem Cache PageCacheç¼å
顺åºã ç±äºç°ä»£çæä½ç³»ç»æä¾äºé¢è¯»ååææ¯ï¼ç£çç顺åºå大夿°æ
åµä¸æ¯éæºåå
åè¿è¦å¿«ã
Zero-copyãé¶æ·ææ¯åå°æ·è´æ¬¡æ°
Batching of Messages æ¹é量å¤çãåå¹¶å°ç请æ±ï¼ç¶å以æµçæ¹å¼è¿è¡äº¤äºï¼ç´é¡¶ç½ç»ä¸éã
Pull ææ¨¡å¼ãä½¿ç¨ææ¨¡å¼è¿è¡æ¶æ¯çè·åæ¶è´¹ï¼ä¸æ¶è´¹ç«¯å¤çè½åç¸ç¬¦ã
#### 8.kafka producerå¦ä½ä¼åæå
¥é度ï¼
å¢å 线ç¨
æé« batch.size
å¢å æ´å¤ producer å®ä¾
å¢å partition æ°
设置 acks=-1 æ¶ï¼å¦æå»¶è¿å¢å¤§ï¼å¯ä»¥å¢å¤§ num.replica.fetchersï¼follower åæ¥æ°æ®ççº¿ç¨æ°ï¼æ¥è°è§£ï¼
è·¨æ°æ®ä¸å¿çä¼ è¾ï¼å¢å socket ç¼å²åºè®¾ç½®ä»¥å OS tcp ç¼å²åºè®¾ç½®ã
#### 9.kafka producer ææ°æ®ï¼ack 为 0ï¼ 1ï¼ -1 çæ¶å代表å¥ï¼ 设置 -1 çæ¶åï¼ä»ä¹æ
åµä¸ï¼leader ä¼è®¤ä¸ºä¸æ¡æ¶æ¯ commit äº
1ï¼é»è®¤ï¼ï¼æ°æ®åéå°Kafkaåï¼ç»è¿leaderæåæ¥æ¶æ¶æ¯çç确认ï¼å°±ç®æ¯åéæåäºãå¨è¿ç§æ
åµä¸ï¼å¦æleader宿ºäºï¼åä¼ä¸¢å¤±æ°æ®ã
0ï¼ç产è
å°æ°æ®åéåºå»å°±ä¸ç®¡äºï¼ä¸å»çå¾
ä»»ä½è¿åãè¿ç§æ
åµä¸æ°æ®ä¼ è¾æçæé«ï¼ä½æ¯æ°æ®å¯é æ§ç¡®æ¯æä½çã
-1ï¼produceréè¦çå¾
ISRä¸çææfolloweré½ç¡®è®¤æ¥æ¶å°æ°æ®åæç®ä¸æ¬¡åé宿ï¼å¯é æ§æé«ãå½ISR䏿æReplicaé½åLeaderåéACKæ¶ï¼leaderæcommitï¼è¿æ¶åproduceræè½è®¤ä¸ºä¸ä¸ªè¯·æ±ä¸çæ¶æ¯é½commitäºã
#### 10.kafka unclean é
置代表å¥ï¼ä¼å¯¹ spark streaming æ¶è´¹æä»ä¹å½±åï¼
unclean.leader.election.enable 为trueçè¯ï¼æå³çéISRéåçbroker ä¹å¯ä»¥åä¸é举ï¼è¿æ ·æå¯è½å°±ä¼ä¸¢æ°æ®ï¼spark streaming卿¶è´¹è¿ç¨ä¸æ¿å°ç end offset ä¼çªç¶åå°ï¼å¯¼è´ spark streaming jobææã妿unclean.leader.election.enableåæ°è®¾ç½®ä¸ºtrueï¼å°±æå¯è½åçæ°æ®ä¸¢å¤±åæ°æ®ä¸ä¸è´çæ
åµï¼Kafkaçå¯é æ§å°±ä¼éä½ï¼è妿unclean.leader.election.enableåæ°è®¾ç½®ä¸ºfalseï¼Kafkaçå¯ç¨æ§å°±ä¼éä½ã
#### 11.妿leader crashæ¶ï¼ISR为空æä¹åï¼
kafkaå¨Broker端æä¾äºä¸ä¸ªé
ç½®åæ°ï¼unclean.leader.election,è¿ä¸ªåæ°æä¸¤ä¸ªå¼ï¼
trueï¼é»è®¤ï¼ï¼å
许ä¸åæ¥å¯æ¬æä¸ºleaderï¼ç±äºä¸åæ¥å¯æ¬çæ¶æ¯è¾ä¸ºæ»åï¼æ¤æ¶æä¸ºleaderï¼å¯è½ä¼åºç°æ¶æ¯ä¸ä¸è´çæ
åµã
falseï¼ä¸å
许ä¸åæ¥å¯æ¬æä¸ºleaderï¼æ¤æ¶å¦æåçISRå表为空ï¼ä¼ä¸ç´çå¾
æ§leaderæ¢å¤ï¼éä½äºå¯ç¨æ§ã
#### 12.kafkaçmessageæ ¼å¼æ¯ä»ä¹æ ·çï¼
ä¸ä¸ªKafkaçMessageç±ä¸ä¸ªåºå®é¿åº¦çheaderåä¸ä¸ªåé¿çæ¶æ¯ä½bodyç»æã
headeré¨åç±ä¸ä¸ªåèçmagic(æä»¶æ ¼å¼)åå个åèçCRC32(ç¨äºå¤æbodyæ¶æ¯ä½æ¯å¦æ£å¸¸)ææã
å½magicçå¼ä¸º1çæ¶åï¼ä¼å¨magicåcrc32ä¹é´å¤ä¸ä¸ªåèçæ°æ®ï¼attributes(ä¿åä¸äºç¸å
³å±æ§ï¼æ¯å¦æ¯å¦å缩ãåç¼©æ ¼å¼çç)ï¼å¦æmagicçå¼ä¸º0ï¼é£ä¹ä¸åå¨attributes屿§ã
bodyæ¯ç±N个åèææçä¸ä¸ªæ¶æ¯ä½ï¼å
å«äºå
·ä½çkey/valueæ¶æ¯ã
#### 13.kafkaä¸consumer group æ¯ä»ä¹æ¦å¿µï¼
åæ ·æ¯é»è¾ä¸çæ¦å¿µï¼æ¯Kafkaå®ç°åæå广æä¸¤ç§æ¶æ¯æ¨¡åçææ®µãåä¸ä¸ªtopicçæ°æ®ï¼ä¼å¹¿æç»ä¸åçgroupï¼åä¸ä¸ªgroupä¸çworkerï¼åªæä¸ä¸ªworkerè½æ¿å°è¿ä¸ªæ°æ®ãæ¢å¥è¯è¯´ï¼å¯¹äºåä¸ä¸ªtopicï¼æ¯ä¸ªgroupé½å¯ä»¥æ¿å°åæ ·çæææ°æ®ï¼ä½æ¯æ°æ®è¿å
¥groupååªè½è¢«å
¶ä¸çä¸ä¸ªworkeræ¶è´¹ãgroupå
çworkerå¯ä»¥ä½¿ç¨å¤çº¿ç¨æå¤è¿ç¨æ¥å®ç°ï¼ä¹å¯ä»¥å°è¿ç¨åæ£å¨å¤å°æºå¨ä¸ï¼workerçæ°éé常ä¸è¶
è¿partitionçæ°éï¼ä¸äºè
æå¥½ä¿ææ´æ°åå
³ç³»ï¼å 为Kafkaå¨è®¾è®¡æ¶åå®äºä¸ä¸ªpartitionåªè½è¢«ä¸ä¸ªworkeræ¶è´¹ï¼åä¸groupå
ï¼ã
#### 14.Kafkaä¸çæ¶æ¯æ¯å¦ä¼ä¸¢å¤±åé夿¶è´¹ï¼
è¦ç¡®å®Kafkaçæ¶æ¯æ¯å¦ä¸¢å¤±æéå¤ï¼ä»ä¸¤ä¸ªæ¹é¢åæå
¥æï¼æ¶æ¯åéåæ¶æ¯æ¶è´¹ã
1ï¼æ¶æ¯åé
Kafkaæ¶æ¯åéæä¸¤ç§æ¹å¼ï¼åæ¥ï¼syncï¼å弿¥ï¼asyncï¼ï¼é»è®¤æ¯åæ¥æ¹å¼ï¼å¯éè¿producer.type屿§è¿è¡é
ç½®ãKafkaéè¿é
ç½®request.required.acks屿§æ¥ç¡®è®¤æ¶æ¯çç产ï¼
0---表示ä¸è¿è¡æ¶æ¯æ¥æ¶æ¯å¦æåç确认ï¼
1---表示å½Leaderæ¥æ¶æåæ¶ç¡®è®¤ï¼
-1---表示LeaderåFollower齿¥æ¶æåæ¶ç¡®è®¤ï¼
ç»¼ä¸æè¿°ï¼æ6ç§æ¶æ¯ç产çæ
åµï¼ä¸é¢åæ
嵿¥åææ¶æ¯ä¸¢å¤±çåºæ¯ï¼
ï¼1ï¼acks=0ï¼ä¸åKafkaé群è¿è¡æ¶æ¯æ¥æ¶ç¡®è®¤ï¼åå½ç½ç»å¼å¸¸ãç¼å²åºæ»¡äºçæ
嵿¶ï¼æ¶æ¯å¯è½ä¸¢å¤±ï¼
ï¼2ï¼acks=1ãåæ¥æ¨¡å¼ä¸ï¼åªæLeaderç¡®è®¤æ¥æ¶æåå使æäºï¼å¯æ¬æ²¡æåæ¥ï¼æ°æ®å¯è½ä¸¢å¤±ï¼
2ï¼æ¶æ¯æ¶è´¹
Kafkaæ¶æ¯æ¶è´¹æä¸¤ä¸ªconsumeræ¥å£ï¼Low-level APIåHigh-level APIï¼
Low-level APIï¼æ¶è´¹è
èªå·±ç»´æ¤offsetçå¼ï¼å¯ä»¥å®ç°å¯¹Kafkaçå®å
¨æ§å¶ï¼
High-level APIï¼å°è£
äºå¯¹paritionåoffsetç管çï¼ä½¿ç¨ç®åï¼
å¦æä½¿ç¨é«çº§æ¥å£High-level APIï¼å¯è½åå¨ä¸ä¸ªé®é¢å°±æ¯å½æ¶æ¯æ¶è´¹è
ä»éç¾¤ä¸ææ¶æ¯ååºæ¥ãå¹¶æäº¤äºæ°çæ¶æ¯offsetå¼åï¼è¿æ²¡æ¥å¾åæ¶è´¹å°±ææäºï¼é£ä¹ä¸æ¬¡åæ¶è´¹æ¶ä¹å没æ¶è´¹æåçæ¶æ¯å°±â诡å¼âçæ¶å¤±äºï¼
3ï¼è§£å³åæ³
éå¯¹æ¶æ¯ä¸¢å¤±ï¼åæ¥æ¨¡å¼ä¸ï¼ç¡®è®¤æºå¶è®¾ç½®ä¸º-1ï¼å³è®©æ¶æ¯åå
¥LeaderåFollowerä¹ååç¡®è®¤æ¶æ¯åéæåï¼å¼æ¥æ¨¡å¼ä¸ï¼ä¸ºé²æ¢ç¼å²åºæ»¡ï¼å¯ä»¥å¨é
ç½®æä»¶è®¾ç½®ä¸éå¶é»å¡è¶
æ¶æ¶é´ï¼å½ç¼å²åºæ»¡æ¶è®©ç产è
ä¸ç´å¤äºé»å¡ç¶æï¼
éå¯¹æ¶æ¯éå¤ï¼å°æ¶æ¯çå¯ä¸æ è¯ä¿åå°å¤é¨ä»è´¨ä¸ï¼æ¯æ¬¡æ¶è´¹æ¶å¤ææ¯å¦å¤çè¿å³å¯ã
#### 15.为ä»ä¹Kafka䏿¯æè¯»åå离ï¼
å¨ Kafka ä¸ï¼ç产è
åå
¥æ¶æ¯ãæ¶è´¹è
è¯»åæ¶æ¯çæä½é½æ¯ä¸ leader 坿¬è¿è¡äº¤äºçï¼ä» èå®ç°çæ¯ä¸ç§ä¸»å主读çç产æ¶è´¹æ¨¡åã
Kafka 并䏿¯æä¸»åä»è¯»ï¼å 为主åä»è¯»æ 2 ä¸ªå¾æ æ¾ç缺ç¹:
(1)æ°æ®ä¸è´æ§é®é¢ãæ°æ®ä»ä¸»èç¹è½¬å°ä»èç¹å¿
ç¶ä¼æä¸ä¸ªå»¶æ¶çæ¶é´çªå£ï¼è¿ä¸ªæ¶é´ çªå£ä¼å¯¼è´ä¸»ä»èç¹ä¹é´çæ°æ®ä¸ä¸è´ãæä¸æ¶å»ï¼å¨ä¸»èç¹åä»èç¹ä¸ A æ°æ®çå¼é½ä¸º Xï¼ ä¹åå°ä¸»èç¹ä¸ A çå¼ä¿®æ¹ä¸º Yï¼é£ä¹å¨è¿ä¸ªåæ´éç¥å°ä»èç¹ä¹åï¼åºç¨è¯»åä»èç¹ä¸ç A æ°æ®çå¼å¹¶ä¸ä¸ºææ°ç Yï¼ç±æ¤ä¾¿äº§çäºæ°æ®ä¸ä¸è´çé®é¢ã
(2)å»¶æ¶é®é¢ã类似 Redis è¿ç§ç»ä»¶ï¼æ°æ®ä»åå
¥ä¸»èç¹å°åæ¥è³ä»èç¹ä¸çè¿ç¨éè¦ç» åç½ç»â主èç¹å
åâç½ç»âä»èç¹å
åè¿å ä¸ªé¶æ®µï¼æ´ä¸ªè¿ç¨ä¼èè´¹ä¸å®çæ¶é´ãèå¨ Kafka ä¸ï¼ä¸»ä»åæ¥ä¼æ¯ Redis æ´å èæ¶ï¼å®éè¦ç»åç½ç»â主èç¹å
åâ主èç¹ç£çâç½ç»âä»è ç¹å
åâä»èç¹ç£çè¿å ä¸ªé¶æ®µãå¯¹å»¶æ¶ææçåºç¨èè¨ï¼ä¸»åä»è¯»çåè½å¹¶ä¸å¤ªéç¨ã
#### 16.Kafka䏿¯æä¹ä½ç°æ¶æ¯é¡ºåºæ§çï¼
kafkaæ¯ä¸ªpartitionä¸çæ¶æ¯å¨åå
¥æ¶é½æ¯æåºçï¼æ¶è´¹æ¶ï¼æ¯ä¸ªpartitionåªè½è¢«æ¯ä¸ä¸ªgroupä¸çä¸ä¸ªæ¶è´¹è
æ¶è´¹ï¼ä¿è¯äºæ¶è´¹æ¶ä¹æ¯æåºçã
æ´ä¸ªtopicä¸ä¿è¯æåºãå¦æä¸ºäºä¿è¯topicæ´ä¸ªæåºï¼é£ä¹å°partitionè°æ´ä¸º1ã
#### 17.kafkaå¦ä½å®ç°å»¶è¿éåï¼
Kafka并没æä½¿ç¨JDKèªå¸¦çTimeræè
DelayQueueæ¥å®ç°å»¶è¿çåè½ï¼èæ¯åºäºæ¶é´è½®èªå®ä¹äºä¸ä¸ªç¨äºå®ç°å»¶è¿åè½ç宿¶å¨ï¼SystemTimerï¼ãJDKçTimeråDelayQueueæå
¥åå 餿ä½ç平忶é´å¤æåº¦ä¸ºO(nlog(n))ï¼å¹¶ä¸è½æ»¡è¶³Kafkaç髿§è½è¦æ±ï¼èåºäºæ¶é´è½®å¯ä»¥å°æå
¥åå 餿ä½çæ¶é´å¤æåº¦é½é为O(1)ãæ¶é´è½®çåºç¨å¹¶éKafkaç¬æï¼å
¶åºç¨åºæ¯è¿æå¾å¤ï¼å¨NettyãAkkaãQuartzãZookeeperçç»ä»¶ä¸é½å卿¶é´è½®ç踪影ã
åºå±ä½¿ç¨æ°ç»å®ç°ï¼æ°ç»ä¸çæ¯ä¸ªå
ç´ å¯ä»¥åæ¾ä¸ä¸ªTimerTaskList对象ãTimerTaskListæ¯ä¸ä¸ªç¯å½¢ååé¾è¡¨ï¼å¨å
¶ä¸çé¾è¡¨é¡¹TimerTaskEntryä¸å°è£
äºçæ£ç宿¶ä»»å¡TimerTask.
Kafkaä¸å°åºæ¯æä¹æ¨è¿æ¶é´çå¢ï¼Kafkaä¸ç宿¶å¨åå©äºJDKä¸çDelayQueueæ¥å婿¨è¿æ¶é´è½®ãå
·ä½åæ³æ¯å¯¹äºæ¯ä¸ªä½¿ç¨å°çTimerTaskListé½ä¼å å
¥å°DelayQueueä¸ãKafkaä¸çTimingWheelä¸é¨ç¨æ¥æ§è¡æå
¥åå é¤TimerTaskEntryçæä½ï¼èDelayQueueä¸é¨è´è´£æ¶é´æ¨è¿çä»»å¡ãåè¯æ³ä¸ä¸ï¼DelayQueueä¸ç第ä¸ä¸ªè¶
æ¶ä»»å¡å表çexpiration为200msï¼ç¬¬äºä¸ªè¶
æ¶ä»»å¡ä¸º840msï¼è¿éè·åDelayQueueçé头åªéè¦O(1)çæ¶é´å¤æåº¦ã妿éç¨æ¯ç§å®æ¶æ¨è¿ï¼é£ä¹è·åå°ç¬¬ä¸ä¸ªè¶
æ¶çä»»å¡åè¡¨æ¶æ§è¡ç200次æ¨è¿ä¸æ199次å±äºâ空æ¨è¿âï¼èè·åå°ç¬¬äºä¸ªè¶
æ¶ä»»å¡æ¶æéè¦æ§è¡639次â空æ¨è¿âï¼è¿æ ·ä¼æ æ
ç©ºèæºå¨çæ§è½èµæºï¼è¿ééç¨DelayQueueæ¥è¾
å©ä»¥å°éç©ºé´æ¢æ¶é´ï¼ä»èåå°äºâç²¾åæ¨è¿âãKafkaä¸ç宿¶å¨çå¯è°æ¯âç¥äººåç¨âï¼ç¨TimingWheelåææ
é¿ç任塿·»å åå 餿ä½ï¼èç¨DelayQueueåææ
é¿çæ¶é´æ¨è¿å·¥ä½ï¼ç¸è¾
ç¸æã
#### 18.ä»ä¹æ¯æ¶è´¹è
ç»?
æ¶è´¹è
ç»æ¯ Kafka ç¬æçæ¦å¿µï¼å¦æé¢è¯å®é®è¿ 个ï¼å°±è¯´æä»å¯¹æ¤æ¯æä¸å®äºè§£çãæå
ç»åºæ åçæ¡ï¼
1ãå®ä¹ï¼å³æ¶è´¹è
ç»æ¯ Kafka æä¾ç坿©å±ä¸å
·æå®¹éæ§çæ¶è´¹è
æºå¶ã
2ãåçï¼å¨ Kafka ä¸ï¼æ¶è´¹è
ç»æ¯ä¸ä¸ªç±å¤ä¸ªæ¶è´¹è
å®ä¾ ææçç»ãå¤ä¸ªå®ä¾å
±å订é
è¥å¹²ä¸ªä¸»é¢ï¼å®ç°å
±åæ¶è´¹ãåä¸ä¸ªç»ä¸çæ¯ä¸ªå®ä¾é½é
ç½®æ ç¸åçç» IDï¼è¢«åé
ä¸åç订é
ååºãå½æä¸ªå®ä¾ææçæ¶åï¼å
¶ä»å®ä¾ä¼èªå¨å°æ¿æ
èµ· å®è´è´£æ¶è´¹çååºã
æ¤æ¶ï¼åæä¸ä¸ªå°æå·§ç»å°ä½ :æ¶è´¹è
ç»çé¢ç®ï¼è½å¤å¸®ä½ 卿ç§ç¨åº¦ä¸ææ§ä¸é¢çé¢è¯æ¹
åã
å¦æä½ æ
é¿ä½ç§»å¼åçï¼å°±ä¸å¦¨åæä¸ä¸æ¶è´¹è
ç»çä½ç§»æäº¤æºå¶;
å¦æä½ æ
é¿ Kafka Brokerï¼å¯ä»¥æä¸ä¸æ¶è´¹è
ç»ä¸ Broker ä¹é´ç交äº;
å¦æä½ æ
é¿ä¸æ¶è´¹è
ç»å®å
¨ä¸ç¸å
³ç Producerï¼é£ä¹å°±å¯ä»¥è¿ä¹è¯´:âæ¶è´¹è
ç»è¦æ¶ è´¹çæ°æ®å®å
¨æ¥èªäº Producer 端çäº§çæ¶æ¯ï¼æå¯¹ Producer è¿æ¯æ¯è¾çæçãâ
#### 19.è§£éä¸ Kafka ä¸ä½ç§»(offset)çä½ç¨ã
å¨ Kafka ä¸ï¼æ¯ä¸ª 主é¢ååºä¸çæ¯æ¡æ¶æ¯é½è¢«èµäºäºä¸ä¸ªå¯ä¸ç ID æ°å¼ï¼ç¨äºæ è¯å®å¨ååºä¸çä½ç½®ãè¿ä¸ª ID æ°å¼ï¼å°±è¢«ç§°ä¸ºä½ç§»ï¼æè
å«åç§»éã䏿¦æ¶æ¯è¢«åå
¥å°ååºæ¥å¿ï¼å®çä½ç§»å¼å°ä¸è½ 被修æ¹ã
çå®è¿äºä¹åï¼ä½ è¿å¯ä»¥ææ´ä¸ªé¢è¯æ¹å转移å°ä½ 叿çå°æ¹ãå¸¸è§æ¹æ³æä»¥ä¸ 3 ç§:
å¦æä½ æ·±è° Broker åºå±æ¥å¿åå
¥çé»è¾ï¼å¯ä»¥å¼ºè°ä¸æ¶æ¯å¨æ¥å¿ä¸çåæ¾æ ¼å¼;
å¦æä½ æç½ä½ç§»å¼ä¸æ¦è¢«ç¡®å®ä¸è½ä¿®æ¹ï¼å¯ä»¥å¼ºè°ä¸âLog Cleaner ç»ä»¶é½ä¸è½å½±åä½ ç§»å¼âè¿ä»¶äºæ
;
å¦æä½ å¯¹æ¶è´¹è
çæ¦å¿µè¿ç®çæï¼å¯ä»¥å详ç»è¯´è¯´ä½ç§»å¼åæ¶è´¹è
ä½ç§»å¼ä¹é´çåºå«ã
#### 20.éè¿°ä¸ Kafka ä¸çé¢å¯¼è
坿¬(Leader Replica)å追éè
坿¬ (Follower Replica)çåºå«ã
è¿éé¢è¡¨é¢ä¸æ¯èæ ¸ä½ å¯¹ Leader å Follower åºå«ççè§£ï¼ä½å¾å®¹æå¼ç³å° Kafka ç忥 æºå¶ä¸ãå æ¤ï¼æå»ºè®®ä½ 主å¨åºå»ï¼ä¸æ¬¡æ§å°æéå«çèç¹ä¹çåºæ¥ï¼ä¹è®¸è½å¤ææ¶æé¢è¯ å®âå¬ä½âï¼å¹¶ä½ç°ä½ çä¸ä¸æ§ã
ä½ å¯ä»¥è¿ä¹åç:Kafka 坿¬å½åå为é¢å¯¼è
坿¬å追éè
坿¬ãåªæ Leader 坿¬æè½ 坹夿ä¾è¯»åæå¡ï¼ååº Clients 端ç请æ±ãFollower 坿¬åªæ¯éç¨æ(PULL)çæ¹ å¼ï¼è¢«å¨å°åæ¥ Leader 坿¬ä¸çæ°æ®ï¼å¹¶ä¸å¨ Leader 坿¬æå¨ç Broker 宿ºåï¼éæ¶ åå¤åºè Leader 坿¬ã
é常æ¥è¯´ï¼åçå°è¿ä¸ªç¨åº¦ï¼å
¶å®æåªè¯´äº 60%ï¼å æ¤ï¼æå»ºè®®ä½ ååç两个é¢å¤çå å 项ã
å¼ºè° Follower 坿¬ä¹è½å¯¹å¤æä¾è¯»æå¡ãèª Kafka 2.4 çæ¬å¼å§ï¼ç¤¾åºéè¿å¼å
¥æ°ç Broker ç«¯åæ°ï¼å
许 Follower 坿¬æéåº¦å°æä¾è¯»æå¡ã
å¼ºè° Leader å Follower çæ¶æ¯åºåå¨å®é
åºæ¯ä¸ä¸ä¸è´ãå¾å¤åå é½å¯è½é æ Leader å Follower ä¿åçæ¶æ¯åºåä¸ä¸è´ï¼æ¯å¦ç¨åº Bugãç½ç»é®é¢çãè¿æ¯å¾ä¸¥é çé误ï¼å¿
é¡»è¦å®å
¨è§é¿ãä½ å¯ä»¥è¡¥å
ä¸ï¼ä¹åç¡®ä¿ä¸è´æ§çä¸»è¦ææ®µæ¯é«æ°´ä½æºå¶ï¼ ä½é«æ°´ä½å¼æ æ³ä¿è¯ Leader è¿ç»åæ´åºæ¯ä¸çæ°æ®ä¸è´æ§ï¼å æ¤ï¼ç¤¾åºå¼å
¥äº Leader Epoch æºå¶ï¼æ¥ä¿®å¤é«æ°´ä½å¼çå¼ç«¯ãå
³äºâLeader Epoch æºå¶âï¼å½å
çèµæä¸æ¯ å¾å¤ï¼å®çæ®å度è¿ä¸å¦é«æ°´ä½ï¼ä¸å¦¨å¤§èå°æè¿ä¸ªæ¦å¿µç§åºæ¥ï¼åæ±æè³ä¸æã
#### 21.å¦ä½è®¾ç½® Kafka è½æ¥æ¶çæå¤§æ¶æ¯ç大å°?
è¿éé¢é¤äºè¦åçæ¶è´¹è
端çåæ°è®¾ç½®ä¹å¤ï¼ä¸å®è¦å ä¸ Broker 端ç设置ï¼è¿æ ·æç®å®æ´ãæ¯ç«ï¼å¦æ Producer é½ä¸è½å Broker 端åéæ°æ®å¾å¤§çæ¶æ¯ï¼å使¥æ¶è´¹ä¸è¯´å¢? å æ¤ï¼ä½ éè¦åæ¶è®¾ç½® Broker ç«¯åæ°å Consumer ç«¯åæ°ã
Broker ç«¯åæ°:message.max.bytesãmax.message.bytes(主é¢çº§å«)å replica.fetch.max.bytesã
Consumer ç«¯åæ°:fetch.message.max.bytesã
Broker 端çæåä¸ä¸ªåæ°æ¯è¾å®¹æéæ¼ãæä»¬å¿
é¡»è°æ´ Follower 坿¬è½å¤æ¥æ¶çæå¤§æ¶ æ¯ç大å°ï¼å¦åï¼å¯æ¬åæ¥å°±ä¼å¤±è´¥ãå æ¤ï¼æè¿ä¸ªçåºæ¥çè¯ï¼å°±æ¯ä¸ä¸ªå å项ã
#### 22.çæ§ Kafka çæ¡æ¶é½æåªäº?
é¢è¯å®å
¶å®æ¯å¨ èå¯ä½ å¯¹çæ§æ¡æ¶çäºè§£å¹¿åº¦ï¼æè
说ï¼ä½ æ¯å¦ç¥éå¾å¤è½çæ§ Kafka çæ¡æ¶ææ¹æ³ãä¸é¢è¿äºå°±æ¯ Kafka åå±åç¨ä¸æ¯è¾æåæ°ççæ§ç³»ç»ã
Kafka Manager:åºè¯¥ç®æ¯ææåçä¸å± Kafka çæ§æ¡æ¶äºï¼æ¯ç¬ç«ççæ§ç³»ç»ã
Kafka Monitor:LinkedIn 弿ºçå
è´¹æ¡æ¶ï¼æ¯æå¯¹é群è¿è¡ç³»ç»æµè¯ï¼å¹¶å®æ¶çæ§æµ
è¯ç»æã
CruiseControl:乿¯ LinkedIn å
¬å¸å¼æºççæ§æ¡æ¶ï¼ç¨äºå®æ¶çæµèµæºä½¿ç¨çï¼ä»¥å æä¾å¸¸ç¨è¿ç»´æä½çãæ UI çé¢ï¼åªæä¾ REST APIã
JMX çæ§:ç±äº Kafka æä¾ççæ§ææ é½æ¯åºäº JMX çï¼å æ¤ï¼å¸é¢ä¸ä»»ä½è½å¤éæ JMX çæ¡æ¶é½å¯ä»¥ä½¿ç¨ï¼æ¯å¦ Zabbix å Prometheusã
å·²æå¤§æ°æ®å¹³å°èªå·±ççæ§ä½ç³»:å Cloudera æä¾ç CDH è¿ç±»å¤§æ°æ®å¹³å°ï¼å¤©ç¶å°±æ ä¾ Kafka çæ§æ¹æ¡ã
JMXTool:ç¤¾åºæä¾çå½ä»¤è¡å·¥å
·ï¼è½å¤å®æ¶çæ§ JMX ææ ãçä¸è¿ä¸æ¡ï¼å±äºç»å¯¹ çå å项ï¼å 为ç¥éç人å¾å°ï¼èä¸ä¼ç»äººä¸ç§ä½ 对 Kafka å·¥å
·é常çæçæè§ã妿 ä½ ææ¶ä¸äºè§£å®çç¨æ³ï¼å¯ä»¥å¨å½ä»¤è¡ä»¥æ åæ°æ¹å¼æ§è¡ä¸ä¸kafka-run-class.sh kafka.tools.JmxToolï¼å¦ä¹ ä¸å®çç¨æ³ã
#### 23.Broker ç Heap Size å¦ä½è®¾ç½®ï¼
å¦ä½è®¾ç½® Heap Size çé®é¢ï¼å
¶å®å Kafka å
³ç³»ä¸å¤§ï¼å®æ¯ä¸ç±»é常éç¨çé¢è¯é¢ç®ãä¸ æ¦ä½ åºå¯¹ä¸å½ï¼é¢è¯æ¹å徿å¯è½è¢«å¼å° JVM å GC ä¸å»ï¼é£æ ·çè¯ï¼ä½ 被é®ä½çå çå°± ä¼å¢å¤§ãå æ¤ï¼æå»ºè®®ä½ ç®åå°ä»ç»ä¸ä¸ Heap Size çè®¾ç½®æ¹æ³ï¼å¹¶æéç¹æ¾å¨ Kafka Broker å 大å°è®¾ç½®çæä½³å®è·µä¸ã
æ¯å¦ï¼ä½ å¯ä»¥è¿æ ·åå¤:ä»»ä½ Java è¿ç¨ JVM å 大å°ç设置é½éè¦ä»ç»å°è¿è¡èéåæµ è¯ãä¸ä¸ªå¸¸è§çåæ³æ¯ï¼ä»¥é»è®¤çåå§ JVM å 大å°è¿è¡ç¨åºï¼å½ç³»ç»è¾¾å°ç¨³å®ç¶æåï¼æå¨è§¦å䏿¬¡ Full GCï¼ç¶åéè¿ JVM å·¥å
·æ¥ç GC åçåæ´»å¯¹è±¡å¤§å°ãä¹åï¼å°å 大å°è®¾ ç½®æå活对象æ»å¤§å°ç 1.5~2 åãå¯¹äº Kafka èè¨ï¼è¿ä¸ªæ¹æ³ä¹æ¯éç¨çãä¸è¿ï¼ä¸çæ 个æä½³å®è·µï¼é£å°±æ¯å° Broker ç Heap Size åºå®ä¸º 6GBãç»è¿å¾å¤å
¬å¸çéªè¯ï¼è¿ä¸ªå¤§ å°æ¯è¶³å¤ä¸è¯å¥½çã
#### 24.å¦ä½ä¼°ç® Kafka éç¾¤çæºå¨æ°é?
è¿éé¢ç®èæ¥çæ¯æºå¨æ°éåæç¨èµæºä¹é´çå
³èå
³ç³»ãæè°èµæºï¼ä¹å°±æ¯ CPUãå
åãç£çå带宽ã
é常æ¥è¯´ï¼CPU åå
åèµæºçå
è¶³æ¯æ¯è¾å®¹æä¿è¯çï¼å æ¤ï¼ä½ éè¦ä»ç£ç空é´å带宽å ç¨ä¸¤ä¸ªç»´åº¦å»è¯ä¼°æºå¨æ°éã
å¨é¢ä¼°ç£ççå ç¨æ¶ï¼ä½ ä¸å®ä¸è¦å¿è®°è®¡ç®å¯æ¬åæ¥çå¼éã妿䏿¡æ¶æ¯å ç¨ 1KB çç£ ç空é´ï¼é£ä¹ï¼å¨æ 3 ä¸ªå¯æ¬ç主é¢ä¸ï¼ä½ å°±éè¦ 3KB çæ»ç©ºé´æ¥ä¿åè¿æ¡æ¶æ¯ãæ¾å¼å° å°è¿äºèèå ç´ çåºæ¥ï¼è½å¤å½°æ¾ä½ èèé®é¢çå
¨é¢æ§ï¼æ¯ä¸ä¸ªé¾å¾çå å项ã
对äºè¯ä¼°å¸¦å®½æ¥è¯´ï¼å¸¸è§ç带宽æ 1Gbps å 10Gbpsï¼ä½ä½ è¦åè®°ï¼è¿ä¸¤ä¸ªæ°åä»
ä»
æ¯æå¤§å¼ãå æ¤ï¼ä½ æå¥½åé¢è¯å®ç¡®è®¤ä¸ä¸ç»å®ç带宽æ¯å¤å°ãç¶åï¼æç¡®éè¿°åºå½å¸¦å®½å ç¨æ¥ è¿æ»å¸¦å®½ç 90% æ¶ï¼ä¸¢å
æ
形就ä¼åçãè¿æ ·è½æ¾ç¤ºåºä½ çç½ç»åºæ¬åã
#### 25.Leader æ»æ¯ -1ï¼æä¹ç ´?
å¨ç产ç¯å¢ä¸ï¼ä½ ä¸å®ç¢°å°è¿âæä¸ªä¸»é¢ååºä¸è½å·¥ä½äºâçæ
å½¢ã使ç¨å½ä»¤è¡æ¥çç¶æç è¯ï¼ä¼åç° Leader æ¯ -1ï¼äºæ¯ï¼ä½ 使ç¨åç§å½ä»¤é½æ æµäºäºï¼æååªè½ç¨âéå¯å¤§ æ³âã
使¯ï¼ææ²¡æä»ä¹åæ³ï¼å¯ä»¥ä¸éå¯é群ï¼å°±è½è§£å³æ¤äºå¢?è¿å°±æ¯æ¤é¢çç±æ¥ã
æç´æ¥ç»çæ¡:å é¤ ZooKeeper èç¹ /controllerï¼è§¦å Controller éé举ã Controller éé举è½å¤ä¸ºææä¸»é¢ååºéå·ååºç¶æï¼å¯ä»¥ææè§£å³å ä¸ä¸è´å¯¼è´ç Leader ä¸å¯ç¨é®é¢ãæå ä¹å¯ä»¥æå®ï¼å½é¢è¯å®é®åºæ¤é¢æ¶ï¼è¦ä¹å°±æ¯ä»ççä¸ç¥éæä¹ è§£å³å¨åä½ å¯»æ±çæ¡ï¼è¦ä¹ä»å°±æ¯å¨çä½ è¯´åºè¿ä¸ªçæ¡ãæä»¥ï¼åä¸å«ä¸ä¸æ¥å°±è¯´âæ¥ä¸ªé å¯âä¹ç±»çè¯ã
#### 26.LEOãLSOãARãISRãHW é½è¡¨ç¤ºä»ä¹å«ä¹?
LEO:Log End Offsetãæ¥å¿æ«ç«¯ä½ç§»å¼ææ«ç«¯åç§»éï¼è¡¨ç¤ºæ¥å¿ä¸ä¸æ¡å¾
æå
¥æ¶æ¯ç ä½ç§»å¼ã举个ä¾åï¼å¦ææ¥å¿æ 10 æ¡æ¶æ¯ï¼ä½ç§»å¼ä» 0 å¼å§ï¼é£ä¹ï¼ç¬¬ 10 æ¡æ¶æ¯çä½ ç§»å¼å°±æ¯ 9ãæ¤æ¶ï¼LEO = 10ã
LSO:Log Stable Offsetãè¿æ¯ Kafka äºå¡çæ¦å¿µãå¦æä½ æ²¡æä½¿ç¨å°äºå¡ï¼é£ä¹è¿ä¸ª å¼ä¸åå¨(å
¶å®ä¹ä¸æ¯ä¸åå¨ï¼åªæ¯è®¾ç½®æä¸ä¸ªæ æä¹çå¼)ãè¯¥å¼æ§å¶äºäºå¡åæ¶è´¹ è
è½å¤çå°çæ¶æ¯èå´ãå®ç»å¸¸ä¸ Log Start Offsetï¼å³æ¥å¿èµ·å§ä½ç§»å¼ç¸æ··æ·ï¼å 为 æäºäººå°åè
ç¼©åæ LSOï¼è¿æ¯ä¸å¯¹çãå¨ Kafka ä¸ï¼LSO å°±æ¯æä»£ Log Stable Offsetã
AR:Assigned ReplicasãAR æ¯ä¸»é¢è¢«å建åï¼ååºå建æ¶è¢«åé
ç坿¬éåï¼å¯æ¬ä¸ª æ°ç±å¯æ¬å åå³å®ã
ISR:In-Sync ReplicasãKafka ä¸ç¹å«éè¦çæ¦å¿µï¼æä»£çæ¯ AR ä¸é£äºä¸ Leader ä¿ æåæ¥ç坿¬éåãå¨ AR ä¸ç坿¬å¯è½ä¸å¨ ISR ä¸ï¼ä½ Leader 坿¬å¤©ç¶å°±å
å«å¨ ISR ä¸ãå
³äº ISRï¼è¿æä¸ä¸ªå¸¸è§çé¢è¯é¢ç®æ¯å¦ä½å¤æå¯æ¬æ¯å¦åºè¯¥å±äº ISRãç®åç夿 便®æ¯:Follower 坿¬ç LEO è½å Leader LEO çæ¶é´ï¼æ¯å¦è¶
è¿äº Broker ç«¯åæ° replica.lag.time.max.ms å¼ã妿è¶
è¿äºï¼å¯æ¬å°±ä¼è¢«ä» ISR ä¸ç§»é¤ã
HW:髿°´ä½å¼(High watermark)ãè¿æ¯æ§å¶æ¶è´¹è
å¯è¯»åæ¶æ¯èå´çéè¦å段ãä¸ ä¸ªæ®éæ¶è´¹è
åªè½âçå°âLeader 坿¬ä¸ä»äº Log Start Offset å HW(ä¸å«)ä¹é´ç æææ¶æ¯ãæ°´ä½ä»¥ä¸çæ¶æ¯æ¯å¯¹æ¶è´¹è
ä¸å¯è§çãå
³äº HWï¼é®æ³æå¾å¤ï¼æè½æ³å°ç æé«çº§ç鮿³ï¼å°±æ¯è®©ä½ 宿´å°æ¢³çä¸ Follower 坿¬æå Leader 坿¬ãæ§è¡åæ¥æºå¶ çè¯¦ç»æ¥éª¤ãè¿å°±æ¯æä»¬ç第 20 éé¢çé¢ç®ï¼ä¸ä¼å¿æä¼ç»åºçæ¡åè§£æã
#### 27.Kafka è½æå¨å 餿¶æ¯å?
å
¶å®ï¼Kafka ä¸éè¦ç¨æ·æå¨å 餿¶æ¯ã宿¬èº«æä¾äºçåçç¥ï¼è½å¤èªå¨å é¤è¿ææ¶æ¯ã å½ç¶ï¼å®æ¯æ¯ææå¨å 餿¶æ¯çãå æ¤ï¼ä½ æå¥½ä»è¿ä¸¤ä¸ªç»´åº¦å»åçã
对äºè®¾ç½®äº Key ä¸åæ° cleanup.policy=compact ç主é¢èè¨ï¼æä»¬å¯ä»¥æé 䏿¡