1.Kafka概述
1.概述
媽媽:生產者
你:消費者
饅頭:數據流、消息
正常情況下: 生產一個 消費一個
其他情況:
一直生產,你喫到某一個饅頭時,你卡主(機器故障), 饅頭就丟失了
一直生產,做饅頭速度快,你喫來不及,饅頭也就丟失了
拿個碗/籃子,饅頭做好以後先放到籃子裏,你要喫的時候去籃子裏面取出來喫
籃子/框: Kafka
當籃子滿了,饅頭就裝不下了,咋辦?
多準備幾個籃子 === Kafka的擴容
1)訂閱與消費
2)高效的處理
3)安全的分佈式存儲
4)可以做流處理(但是很少用)
2.Kafka架構
Kafka架構
producer:生產者,就是生產饅頭(老媽)
consumer:消費者,就是喫饅頭的(你)
broker:籃子
topic:主題,給饅頭帶一個標籤,topica的饅頭是給你喫的,topicb的饅頭是給你弟弟喫
3.單節點多broker部署
複製server.properties_0,修改:broker.id=0,端口號:9092,日誌名稱_0
server.properties_1,修改:broker.id=1,端口號:9093,日誌名稱_1
......
4.Kafka容錯性
結論:多broker時,只要有一個broker正常,正常的broker就會被選舉爲leader,正常使用。
5.API編程
向Kafka發送數據:調用producer.send(new keyedMessage<Integer,String>(topic,message));
消費Kafka數據:
//String : topic
//List<KafkaStream<byte[],byte[]>> 對應的數據流
Map<String,List<KafkaStream<byte[],byte[]>>> messageStream = consumer.createMessageStreams(topicCountMap);
KafkaStream<byte[],byte[]> stream = messageStream.get(topic).get(0); //獲取我們每次接受到的數據
ConsumerIterator<byte[],byte[]> iterator = stream.iterator();
6.相關命令
虛擬機上啓動kafka:
cd /home/hadoop/app/kafka_2.11-0.9.0.0/
kafka-server-start.sh $KAFKA_HOME/config/server.properties
後臺啓動:加-daemon
kafka-server-start.sh -daemon config/server-1.properties &
創建一個topic:zk
kafka-topics.sh --create --zookeeper hadoop000:2181 --replication-factor 1 --partitions 1 --topic hello_topic
(--replication-factor 1(分區信息) --partitions 1(副本信息))
查所有topic:
kafka-topics.sh --list --zookeeper hadoop000:2181
發送消息:broker
kafka-console-producer.sh --broker-list hadoop000:9092 --topic hello_topic
消費消息: zk
kafka-console-consumer.sh --zookeeper hadoop000:2181 --topic hello_topic --from-beginn
(--from-beginn 重啓後消費從開始的所有數據)
查看所有topic的詳細信息:kafka-topics.sh --describe --zookeeper hadoop000 :2181
查看指定topic的詳細信息:kafka-topics.sh --describe --zookeeper hadoop000:2181 --topic hello_topic