kafka起初是由Linkedin開發(fā)的分布式消息系統(tǒng)尿招,使用Scala編寫矾柜,能做支持發(fā)布及訂閱,因可在多個服務(wù)器進行水平擴展及高吞吐率而被廣泛使用就谜。目前更多的開源分布式處理系統(tǒng)怪蔑,如Cloudera,Apache storm,Spark都支持kafka集成。
那什么是消息隊列丧荐?
大家應(yīng)該都會遇到過一個場景饮睬,去M點餐時收銀員會給一個號牌,并告知等待叫號取餐篮奄,大家根據(jù)自己手里的號牌排隊等叫號。即使人很多但是也很有秩序割去。
上述場景中窟却,點餐的柜臺就是一個消息隊列,A把訂餐的消息告知柜臺呻逆,此時A是生產(chǎn)者的角色夸赫,柜臺是傳輸?shù)慕巧華取完餐又成了消費者的角色咖城。這就是消息隊列一個完整的走向茬腿。
消息隊列的作用是在傳輸過程中能完整的的保存消息的內(nèi)容,列隊是提供路由及保消息的傳遞,如果發(fā)送消息時接收者暫不可用固该,消息隊列會保留消息点楼,直到傳遞成功。并且消息隊列的優(yōu)點是能實時返回執(zhí)行結(jié)果悴品。
大概介紹一些kafka的名詞禀综,例如producer(生產(chǎn)者),broker(籃子),consumer(消費者),topic(主題),partition(分區(qū)),consumer Group(消費組)……
生產(chǎn)者和消費者都是通過API去連接broker苔严。
broker是存放消息隊列的容器定枷,producer會把消息放在broker中,consumer會訂閱broker中的消息届氢。
topic是用來區(qū)分不同的主題欠窒,隔離不同的數(shù)據(jù)。
partition是把topic中的數(shù)據(jù)存放在不同的分區(qū)退子,減輕服務(wù)器的吞吐岖妄。
consumer Group是針對訂閱相同topic的worker做了一個分組,一個worker訂閱后整個消費組都可以消費絮供,也可以多個consumer Group去消費一個topic衣吠。
安裝配置步驟:
注意:是在安裝并啟動了zookeeper后再安裝kafka。
試驗機器:192.168.10.10 ? ? hostname:zk1
192.168.10.11 ?? hostname:zk2
192.168.10.12 ? ? hostname:zk3?
三臺機器的操作步驟都是一致的壤靶,除了broker.id記得要改成不一樣的數(shù)缚俏。
[^_^] ~# tar xf kafka_2.12-2.0.0.tgz -C /usr/local/
[^_^] ~# cd /usr/local/kafka_2.12-2.0.0/config/
[^_^] config# egrep -v "^$|#" server.properties ? (字體加粗都是需要修改參數(shù)的)
broker.id=1
listeners=PLAINTEXT://zk1:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/var/log/kafka-logs
num.partitions=3
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
[^_^] ~# cd /usr/local/kafka_2.12-2.0.0/bin/
[^_^] bin# ./kafka-server-start.sh ../config/server.properties &
測試:[^_^] ~# jps
4070 QuorumPeerMain
30363 ConsoleConsumer
29262 Kafka
31870 Jps
[^_^] ~#netstat -ntlp|grep kafka? kafka端口9092
驗證kafka的生產(chǎn)和消費:
1.在生產(chǎn)者服務(wù)器上創(chuàng)建topic
[T_T] ~# cd /usr/local/kafka_2.12-2.0.0/bin/
[^_^] bin# ./kafka-topics.sh --create --zookeeper 192.168.10.10:2181 --replication-factor 2 --partitions 3 --topic xiaobai
--replication-factor 2? #復(fù)制兩份
--partitions 3 ?? #創(chuàng)建仨分區(qū)來存消息
--topic xiaobai ? #主題為xiaobai
2.在生產(chǎn)者上發(fā)布
[T_T] bin# ./kafka-console-producer.sh --broker-list 192.168.10.10:9092 --topic xiaobai
此時console會處于阻塞狀態(tài),可以直接輸入數(shù)據(jù)
3.創(chuàng)建消費者訂閱
[T_T] bin# ./kafka-console-consumer.sh --bootstrap-server 192.168.10.10:9092 --topic xiaobai --from-beginning
當(dāng)生產(chǎn)者在xiaobai的topic發(fā)布消息時贮乳,consumer的console就會顯示忧换。