簡介
Kafka是一個分布式消息隊列
特點
- kafka是分布式的掌腰,其所有組件都可以是分布式的
- 消息生產(chǎn)時可以對消息進行區(qū)分(歸類)张吉,可以進行分區(qū)肮蛹,并且可以持續(xù)添加
- kafka每秒可以產(chǎn)生約25萬消息(50MB)伦忠,每秒處理55萬消息(110MB)
- 消息被處理的狀態(tài)是在consumer端維護昆码,而不是由server端維護赋咽,當失敗時脓匿,能自動平衡
組成
- Topic(主題):用于區(qū)分不同類別信息的類別名稱;由producer制定
- Producer(生產(chǎn)者):將消息發(fā)布到kafka特定的Topic的對象(過程)
- Consumer(消費者):訂閱并處理特定的Topic中的消息的對象(過程)
- Broker(kafka服務(wù)集群):已發(fā)布的消息保存在一組服務(wù)器中袱瓮,稱之為Kafka集群爱咬;集群中的每一個服務(wù)器都是一個代理(Broker). 消費者可以訂閱一個或多個話題精拟,并從Broker拉數(shù)據(jù)蜂绎,從而消費這些已發(fā)布的消息师枣。
- Partition(分區(qū)):Topic物理上的分組践美,一個topic可以分為多個partition,每個partition是一個有序的隊列敛滋。partition中的每條消息都會被分配一個有序的id(offset)
- Message(消息):通信的最基本的單位绎晃,每個producer可以向一個topic發(fā)布一些消息庶艾。
kafka環(huán)境搭建
tip:以下為docker環(huán)境下的安裝
注意:kafka環(huán)境基于zookeeper,zookeeper環(huán)境基于java-jdk
docker環(huán)境安裝自行百度
下載鏡像
zookeeper鏡像:docker pull wurstmeister/zookeeper
kafka鏡像:docker pull wurstmeister/kafka
運行容器
- zookeeper容器:
docker run -d --name zookeeper -p 2181:2181 鏡像名/鏡像id
- kafka容器:
docker run -d --name kafka -p 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=127.0.0.1 --env KAFKA_ADVERTISED_PORT=9092 wurstmeister/kafka:latest
驗證服務(wù)是否可用
進入容器:
docker exec -it kafka bash
進入kafka服務(wù)目錄:
cd /opt/kafka_+版本號/bin/
運行生產(chǎn)者發(fā)送消息:
./kafka-console-producer.sh --broker-list localhost:9092 --topic sun
編寫消息內(nèi)容:
> {"datas":[{"channel":"","metric":"temperature","producer":"mytest","sn":"IJA0101-00002245","time":"1543207156000","value":"80"}],"ver":"1.0"}
在另一個shell進入容器,進入kafka服務(wù)目錄,運行kafka消費者接受消息:
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic sun --from-beginning
當接收到編寫的消息證明kafka服務(wù)可用