±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËÓ¦Óó¡¾°¡¢Kafka
ÍØÆËͼ£¨¶à¸±±¾»úÖÆ£©¡¢Kafka ºËÐÄ×é¼þ¡¢·þÎñÖÎÀí¡¢Kafka ΪʲôÕâô¿ìµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÔÆ¼ÓÉçÇø £¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
Ò»¡¢Ó¦Óó¡¾°
Òì²½½â¹¹£ºÔÚÉÏÏÂÓÎûÓÐÇ¿ÒÀÀµµÄÒµÎñ¹ØÏµ»òÕë¶Ôµ¥´ÎÇëÇó²»ÐèÒªÁ¢¿Ì´¦ÀíµÄÒµÎñ
ϵͳ»º³å£ºÓÐÀûÓÚ½â¾ö·þÎñϵͳµÄÍÌÍÂÁ¿²»Ò»ÖµÄÇé¿ö£¬ÓÈÆä¶Ô´¦ÀíËٶȽÏÂýµÄ·þÎñÀ´ËµÆðµ½»º³å×÷ÓÃ
Ïû·å×÷Ó㺶ÔÓÚ¶Ìʱ¼äżÏֵļ«¶ËÁ÷Á¿£¬¶Ôºó¶ËµÄ·þÎñ¿ÉÒÔÆô¶¯±£»¤×÷ÓÃ
Êý¾ÝÁ÷´¦Àí£º¼¯³É spark ×öʵʱÊý¾ÝÁ÷´¦Àí
¶þ¡¢Kafka ÍØÆËͼ£¨¶à¸±±¾»úÖÆ£©

ÓÉÉÏͼÎÒÃÇ¿ÉÒÔ·¢ÏÖ Kafka ÊÇ·Ö²¼Ê½£¬¶ÔÓÚÿһ¸ö·ÖÇø¶¼´æÔڶั±¾£¬Í¬Ê±Õû¸ö¼¯ÈºµÄ¹ÜÀí¶¼Í¨¹ý zookeeper
¹ÜÀí¡£
Èý¡¢Kafka ºËÐÄ×é¼þ
1. broker
Kafka ·þÎñÆ÷£¬¸ºÔðÏûÏ¢´æ´¢ºÍת·¢£»Ò»¸ö broker ¾Í´ú±íÒ»¸ö kafka ½Úµã¡£Ò»¸ö broker
¿ÉÒÔ°üº¬¶à¸ö topic¡£
2. topic
ÏûÏ¢Àà±ð£¬Kafka °´ÕÕ topic À´·ÖÀàÏûÏ¢¡£
3. partition
topic µÄ·ÖÇø£¬Ò»¸ö topic ¿ÉÒÔ°üº¬¶à¸ö partition£¬topic ÏûÏ¢±£´æÔÚ¸÷¸ö
partition ÉÏ£»ÓÉÓÚÒ»¸ö topic Äܱ»·Öµ½¶à¸ö·ÖÇøÉÏ£¬¸ø kafka Ìṩ¸øÁ˲¢ÐеĴ¦ÀíÄÜÁ¦£¬ÕâÒ²ÕýÊÇ
kafka ¸ßÍÌ͵ÄÔÒòÖ®Ò»¡£
partition ÎïÀíÉÏÓɶà¸ö segment Îļþ×é³É£¬Ã¿¸ö segment ´óСÏàµÈ£¬Ë³Ðò¶Áд£¨ÕâÒ²ÊÇ
kafka ±È½Ï¿ìµÄÔÒòÖ®Ò»£¬²»ÐèÒªËæ»úд£©¡£Ã¿¸ö Segment Êý¾ÝÎļþÒԸöÎÖÐ×îСµÄ offset
£¬ÎļþÀ©Õ¹ÃûΪ.log¡£µ±²éÕÒ offset µÄ Message µÄʱºò£¬Í¨¹ý¶þ·Ö²éÕÒ¿ìÕÒµ½ Message
Ëù´¦ÓÚµÄ Segment ÖС£

4. offset
ÏûÏ¢ÔÚÈÕÖ¾ÖеÄλÖ㬿ÉÒÔÀí½âÊÇÏûÏ¢ÔÚ partition ÉÏµÄÆ«ÒÆÁ¿£¬Ò²ÊÇ´ú±í¸ÃÏûÏ¢µÄΨһÐòºÅ¡£
ͬʱҲÊÇÖ÷´ÓÖ®¼äµÄÐèҪͬ²½µÄÐÅÏ¢¡£
.jpg)
5. Producer
Éú²úÕߣ¬¸ºÔðÏò Kafka Broker ·¢ÏûÏ¢µÄ¿Í»§¶Ë¡£
6. Consumer
ÏûÏ¢ÏûÕߣ¬¸ºÔðÏû·Ñ Kafka Broker ÖеÄÏûÏ¢¡£
7. Consumer Group
Ïû·ÑÕß×飬ÿ¸ö Consumer ±ØÐëÊôÓÚÒ»¸ö group£»£¨×¢Ò⣺һ¸ö·ÖÇøÖ»ÄÜÓÉ×éÄÚÒ»¸öÏû·ÑÕßÏû·Ñ£¬Ïû·ÑÕß×éÖ®¼ä»¥²»Ó°Ïì¡££©
8. Zookeeper
¹ÜÀí kafka ¼¯Èº£¬¸ºÔð´æ´¢Á˼¯Èº broker¡¢topic¡¢partition µÈ meta
Êý¾Ý´æ´¢£¬Í¬Ê±Ò²¸ºÔð broker ¹ÊÕÏ·¢ÏÖ£¬partition leader Ñ¡¾Ù£¬¸ºÔؾùºâµÈ¹¦ÄÜ¡£

ËÄ¡¢·þÎñÖÎÀí
¼ÈÈ» Kafka ÊÇ·Ö²¼Ê½µÄ·¢²¼/¶©ÔÄϵͳ£¬ÕâÑùÈç¹û×öµÄ¼¯ÈºÖ®¼äÊý¾Ýͬ²½ºÍÒ»ÖÂÐÔ£¬kafka ÊDz»Êǿ϶¨²»»á¶ªÏûÏ¢ÄØ£¿ÒÔ¼°å´»úµÄʱºòÈç¹û½øÐÐ
Leader Ñ¡¾ÙÄØ£¿
1. Êý¾Ýͬ²½
ÔÚ Kafka ÖÐµÄ Partition ÓÐÒ»¸ö leader Óë¶à¸ö follower£¬producer
Íùij¸ö Partition ÖÐдÈëÊý¾Ý£¬ÊÇÖ»»áÍù leader ÖÐдÈëÊý¾Ý£¬È»ºóÊý¾Ý²Å»á±»¸´ÖƽøÆäËûµÄ
Replica ÖС£¶øÃ¿Ò»¸ö follower ¿ÉÒÔÀí½â³ÉÒ»¸öÏû·ÑÕߣ¬¶¨ÆÚÈ¥ leader È¥ÀÏûÏ¢¡£¶øÖ»ÓÐÊý¾Ýͬ²½Á˺ó£¬kafka
²Å»á¸øÉú²úÕß·µ»ØÒ»¸ö ACK ¸æÖªÏûÏ¢ÒѾ´æ´¢Â䵨ÁË¡£
2. ISR
ÔÚ Kafka ÖУ¬ÎªÁ˱£Ö¤ÐÔÄÜ£¬Kafka ²»»á²ÉÓÃǿһÖÂÐԵķ½Ê½À´Í¬²½Ö÷´ÓµÄÊý¾Ý¡£¶øÊÇά»¤ÁËÒ»¸ö£ºin-sync
Replica µÄÁÐ±í£¬Leader ²»ÐèÒªµÈ´ýËùÓÐ Follower ¶¼Íê³Éͬ²½£¬Ö»ÒªÔÚ ISR
ÖÐµÄ Follower Íê³ÉÊý¾Ýͬ²½¾Í¿ÉÒÔ·¢ËÍ ACK ¸øÉú²úÕß¼´¿ÉÈÏΪÏûϢͬ²½Íê³É¡£Í¬Ê±Èç¹û·¢ÏÖ
ISR ÀïÃæÄ³Ò»¸ö follower ÂäºóÌ«¶àµÄ»°£¬¾Í»á°ÑËüÌÞ³ý¡£
¾ßÌåÁ÷³ÌÈçÏ£º




ÉÏÊöµÄ×ö·¨²¢ÎÞ·¨±£Ö¤ Kafka Ò»¶¨²»¶ªÏûÏ¢¡£ËäÈ» Kafka ͨ¹ý¶à¸±±¾»úÖÆÖÐ×î´óÏ޶ȱ£Ö¤ÏûÏ¢²»»á¶ªÊ§£¬µ«ÊÇÈç¹ûÊý¾ÝÒѾдÈëϵͳ
page cache Öе«ÊÇ»¹Ã»À´µÃ¼°Ë¢Èë´ÅÅÌ£¬´ËʱͻȻ»úÆ÷å´»ú»òÕßµôµç£¬ÄÇÏûÏ¢×ÔÈ»¶øÈ»µØ¾Í»á¶ªÊ§¡£
3. Kafka ¹ÊÕϻָ´

Kafka ͨ¹ý Zookeeper Á¬×ø¼¯ÈºµÄ¹ÜÀí£¬ËùÒÔÕâÀïµÄÑ¡¾Ù»úÖÆ²ÉÓõÄÊÇZab£¨zookeeper
ʹÓã©¡£
Éú²úÕß·¢ÉúÏûÏ¢¸ø leader £¬Õâ¸öʱºò leader Íê³ÉÊý¾Ý´æ´¢£¬Í»È»·¢Éú¹ÊÕÏ£¬Ã»Óиø producer
·µ»Ø ack£»
ͨ¹ý ZK Ñ¡¾Ù£¬ÆäÖÐÒ»¸ö follower ³ÉΪ leader £¬Õâ¸öʱºò producer ÖØÐÂÇëÇóеÄ
leader£¬²¢´æ´¢Êý¾Ý¡£
Îå¡¢Kafka ΪʲôÕâô¿ì
1. ˳Ðòд´ÅÅÌ
Kafka ²ÉÓÃÁË˳Ðòд´ÅÅÌ£¬¶øÓÉÓÚ˳Ðòд´ÅÅÌÏà¶ÔËæ»úд£¬¼õÉÙÁËѰµØÖ·µÄºÄ·Ñʱ¼ä¡££¨ÔÚ Kafka
µÄÿһ¸ö·ÖÇøÀïÃæÏûÏ¢ÊÇÓÐÐòµÄ£©
2. Page Cache
Kafka ÔÚ OS ϵͳ·½ÃæÊ¹ÓÃÁË Page Cache ¶ø²»ÊÇÎÒÃÇÆ½³£ËùÓÃµÄ Buffer¡£Page
Cache Æäʵ²»Ä°Éú£¬Ò²²»ÊÇʲôÐÂÏÊÊÂÎï¡£

ÎÒÃÇÔÚ linux Éϲ鿴ÄÚ´æµÄʱºò£¬¾³£¿ÉÒÔ¿´µ½ buff/cache£¬Á½Õß¶¼ÊÇÓÃÀ´¼ÓËÙ IO
¶ÁдÓõ쬶ø cache ÊÇ×÷ÓÃÓÚ¶Á£¬Ò²¾ÍÊÇ˵£¬´ÅÅ̵ÄÄÚÈÝ¿ÉÒÔ¶Áµ½ cache ÀïÃæ£¬ÕâÑùÓ¦ÓóÌÐò¶Á´ÅÅ̾ͷdz£¿ì£»¶ø
buff ÊÇ×÷ÓÃÓÚд£¬ÎÒÃÇ¿ª·¢Ð´´ÅÅ̶¼ÊÇ£¬Ò»°ãÈç¹ûдÈëÒ»¸ö buff ÀïÃæÔÙ flush ¾Í·Ç³£¿ì¡£¶ø
kafka ÕýÊǰÑÕâÁ½Õß·¢»Óµ½Á˼«Ö£ºKafka ËäÈ»ÊÇ scala дµÄ£¬µ«ÊÇÒÀ¾ÉÔÚ Java µÄÐéÄâ»úÉÏÔËÐУ¬¾¡¹ÜÈç´Ë£¬kafka
Ëü»¹ÊǾ¡Á¿±Ü¿ªÁË JVM µÄÏÞÖÆ£¬ËüÀûÓÃÁË Page cache À´´æ´¢£¬ÕâÑù¶ã¿ªÁËÊý¾ÝÔÚ JVM
ÒòΪ GC ¶ø·¢ÉúµÄ STW¡£ÁíÒ»·½ÃæÒ²ÊÇ Page Cache ʹµÃËüʵÏÖÁËÁ㿽±´£¬¾ßÌåÏÂÃæ»á½²¡£
3. Á㿽±´
ÎÞÂÛÊÇÓÅÐãµÄ Netty »¹ÊÇÆäËûÓÅÐãµÄ Java ¿ò¼Ü£¬»ù±¾¶¼ÔÚÁ㿽±´¼õÉÙÁË CPU µÄÉÏÏÂÎÄÇл»ºÍ´ÅÅ̵Ä
IO¡£µ±È» Kafka Ò²²»ÀýÍâ¡£Á㿽±´µÄ¸ÅÄî¾ßÌåÕâÀï²»×÷Ì«ÏêϸµÄ¸´Êö£¬´óÖµظø´ó¼Ò½²Ò»ÏÂÕâ¸ö¸ÅÄî¡£
´«Í³µÄÒ»´ÎÓ¦ÓóÌÇëÇóÊý¾ÝµÄ¹ý³Ì£º

ÕâÀï´óÖ¿ÉÒÔ·¢´«Í³µÄ·½Ê½·¢ÉúÁË4´Î¿½±´£¬2´Î DMA ºÍ2´Î CPU£¬¶ø CPU ·¢ÉúÁË4´ÎµÄÇл»¡££¨DMA
¼òµ¥Àí½â¾ÍÊÇ£¬ÔÚ½øÐÐ I/O É豸ºÍÄÚ´æµÄÊý¾Ý´«ÊäµÄʱºò£¬Êý¾Ý°áÔ˵Ť×÷È«²¿½»¸ø DMA ¿ØÖÆÆ÷£¬¶ø
CPU ²»ÔÙ²ÎÓëÈκÎÓëÊý¾Ý°áÔËÏà¹ØµÄÊÂÇ飩
4. Á㿽±´µÄ·½Ê½

ͨ¹ýÓÅ»¯ÎÒÃÇ¿ÉÒÔ·¢ÏÖ£¬CPU Ö»·¢ÉúÁË2´ÎµÄÉÏÏÂÎÄÇл»ºÍ3´ÎÊý¾Ý¿½±´¡££¨linux ϵͳÌṩÁËϵͳʹʵ÷Óú¯Êý¡°sendfile()¡±£¬ÕâÑùϵͳµ÷Ó㬿ÉÒÔÖ±½Ó°ÑÄں˻º³åÇøÀïµÄÊý¾Ý¿½±´µ½
socket »º³åÇøÀ²»ÔÙ¿½±´µ½Óû§Ì¬£©
5. ·ÖÇø·Ö¶Î
ÎÒÃÇÉÏÃæÒ²½éÉܹý£¬kafka ²ÉÈ¡ÁË·ÖÇøµÄģʽ£¬¶øÃ¿Ò»¸ö·ÖÇøÓÖ¶ÔÓ¦µ½Ò»¸öÎïÀí·Ö¶Î£¬²éÕÒµÄʱºò¿ÉÒÔ¸ù¾Ý¶þ·Ö²éÕÒ¿ìËÙ¶¨Î»¡£ÕâÑù²»½öÌṩÁËÊý¾Ý¶ÁµÄ²éѯЧÂÊ£¬Ò²ÌṩÁ˲¢ÐвÙ×÷µÄ·½Ê½¡£
6. Êý¾ÝѹËõ
Kafka ¶ÔÊý¾ÝÌṩÁË£ºGzip ºÍ Snappy ѹËõÐÒéµÈѹËõÐÒ飬¶ÔÏûÏ¢½á¹¹Ìå½øÐÐÁËѹËõ£¬Ò»·½Ãæ¼õÉÙÁË´ø¿í£¬Ò²¼õÉÙÁËÊý¾Ý´«ÊäµÄÏûºÄ¡£
Áù¡¢Kafka °²×°
1. °²×°JDK
ÓÉÓÚʹÓÃѹËõ°ü»¹ÐèÒª×Ô¼ºÅäÖû·¾³±äÁ¿£¬ËùÒÔÕâÀïÍÆ¼öÖ±½ÓÓà yum
°²×°£¬ÊìϤ²é¿´Ä¿Ç° Java µÄ°æ±¾£º
°²×°ÄãÏëÒªµÄ°æ±¾£¬ÕâÀïÎÒÊÇ1.8
yum install java-1.8.0-openjdk-devel.x86_64 |
²é¿´ÊÇ·ñ°²×°³É¹¦
2. °²×°Zookeeper
Ê×ÏÈÐèҪȥ¹ÙÍøÏÂÔØ°²×°°ü£¬È»ºó½âѹ
tar -zxvf zookeeper-3.4.9.tar.gz |
Òª×öµÄ¾ÍÊǽ«Õâ¸öÎļþ¸´ÖÆÒ»·Ý£¬²¢ÃüÃûΪ£ºzoo.cfg£¬È»ºóÔÚ zoo.cfg ÖÐÐÞ¸Ä×Ô¼ºµÄÅäÖü´¿É
cp zoo_sample.cfg
zoo.cfg
vim zoo.cfg |
Ö÷ÒªÅäÖýâÊÍÈçÏ£º
# zookeeperÄÚ²¿µÄ»ù±¾µ¥Î»£¬µ¥Î»ÊǺÁÃ룬Õâ¸ö±íʾһ¸ötickTimeΪ2000ºÁÃ룬ÔÚzookeeperµÄÆäËûÅäÖÃÖУ¬¶¼ÊÇ»ùÓÚtickTimeÀ´×ö»»ËãµÄ
tickTime=2000
# ¼¯ÈºÖеÄfollower·þÎñÆ÷(F)Óëleader·þÎñÆ÷(L)Ö®¼ä ³õʼÁ¬½Ó ʱÄÜÈÝÈ̵Ä×î¶àÐÄÌøÊý£¨tickTimeµÄÊýÁ¿£©¡£
initLimit=10
#syncLimit£º¼¯ÈºÖеÄfollower·þÎñÆ÷(F)Óëleader·þÎñÆ÷(L)Ö®¼ä ÇëÇóºÍÓ¦´ð
Ö®¼äÄÜÈÝÈ̵Ä×î¶àÐÄÌøÊý£¨tickTimeµÄÊýÁ¿£©
syncLimit=5
# Êý¾Ý´æ·ÅÎļþ¼Ð£¬zookeeperÔËÐйý³ÌÖÐÓÐÁ½¸öÊý¾ÝÐèÒª´æ´¢£¬Ò»¸öÊÇ¿ìÕÕÊý¾Ý£¨³Ö¾Ã»¯Êý¾Ý£©ÁíÒ»¸öÊÇÊÂÎñÈÕÖ¾
dataDir=/tmp/zookeeper
## ¿Í»§¶Ë·ÃÎʶ˿Ú
clientPort=2181 |
ÅäÖû·¾³±äÁ¿
vim ~/.bash_profile
export ZK=/usr/local/src/apache-zookeeper-3.7.0-bin
export PATH=$PATH:$ZK/bin
export PATH
// Æô¶¯
zkServer.sh start |
ÏÂÃæÄÜ¿´Æô¶¯³É¹¦


3. °²×° Kafka
ÏÂÔØ
Kafka
°²×° Kafka
tar -xzvf kafka_2.12-2.0.0.tgz
|
ÅäÖû·¾³±äÁ¿
export ZK=/usr/local/src/apache
-zookeeper-3.7.0-bin
export PATH= $PATH:$ZK/bin
export KAFKA= /usr/local/src/kafka
export PATH= $PATH:$KAFKA/bin |
Æô¶¯ Kafka
nohup kafka-server-start.sh ×Ô¼ºµÄÅäÖÃÎļþ·¾¶/server.properties
& |

|