簡介
kafka是用於構建實時資料管道和流應用程式。具有橫向擴充套件,容錯,wicked fast(**快)等優點,並已在成千上萬家公司執行。
目標相關概念
producer:生產者,就是它來生產「叉燒包」的飯堂阿姨。
consumer:消費者,生產出來的「叉燒包」它來消費。
topic:你把它理解為標籤,生產者每生產出來乙個叉燒包就貼上乙個標籤(topic),消費者可不是誰生產的「叉燒包」都吃的,這樣不同的生產者生產出來的「叉燒包」,消費者就可以選擇性的「吃」了。
broker:就是蒸籠了。
所以整個過程可以如下形象的說明:
飯堂阿姨製作乙個叉燒包,消費者就消費乙個叉燒包。安裝1.假設消費者消費叉燒包的時候噎住了(系統宕機了),生產者還在生產叉燒包,那新生產的叉燒包就丟失了。
2.再比如生產者很強勁(大交易量的情況),生產者1秒鐘生產100個叉燒包,消費者1秒鐘只能吃50個叉燒包,那要不了一會,消費者就吃不消了(訊息堵塞,最終導致系統超時),消費者拒絕再吃了,」叉燒包「又丟失了。
3.這個時候我們放個籃子在它們中間,生產出來的叉燒包都放到籃子裡,消費者去籃子裡拿叉燒包,這樣叉燒包就不會丟失了,都在籃子裡,而這個籃子就是」kafka「。
4.叉燒包其實就是「資料流」,系統之間的互動都是通過「資料流」來傳輸的(就是tcp、http什麼的),也稱為報文,也叫「訊息」。
5.訊息佇列滿了,其實就是籃子滿了,」叉燒包「 放不下了,那趕緊多放幾個籃子,其實就是kafka的擴容。
所以說kafka == 籃子。
2.2 配置:
(注:kafka_home為你配置的環境變數。hadoop01為你配置hosts)
編輯$kafka_home/config/下的server.properties檔案
server.properties
2.3 多broker的kafka安裝配置broker.id=0
#listeners=plaintext://:9092
num.partitions=1
zookeeper.connect=hadoop01:2181
config/server-1.properties:
broker.id=1
listeners=plaintext://:9093
log.dir=/tmp/kafka-logs-1
常用操作命令config/server-2.properties:
broker.id=2
listeners=plaintext://:9094
log.dir=/tmp/kafka-logs-2
啟動kafka
kafka-server-start.sh -daemon $kafka_home/config/server.properties
建立topic
bin/kafka-topics.sh --create --zookeeper hadoop01:2181 --replication-factor 1 --partitions 1 --topic hello_topic
檢視topic
./kafka-topics.sh --list --zookeeper hadoop01:2181
檢視指定topic的詳細資訊
kafka-topics.sh --describe --zookeeper hadoop01:2181
生產訊息
./kafka-console-producer.sh --broker-list hadoop01:9092 --topic hello_topic
消費訊息
./kafka-console-consumer.sh --bootstrap-server hadoop01:9092 --topic hello_topic --from-beginning
0.9.0版本的用下面的命令
./kafka-console-consumer.sh --zookeeper hadoop01:2181 --topic hello_topic --from-beginning
解析:--from-beginning:是從producer開始的位置開始拿資料的。
springboot操作kafka
特別注意(巨坑):kafka有很多版本的。各版本對應使用的springboot或者jar是不一樣。請參考spring官網的說明:
本文使用的是springboot1.5系列+0.10.0.x的
pom.xml
生產者**主要是向kafka服務傳送訊息(生產訊息)。org.springframework.kafka
spring-kafka
1.0.5.release
消費者**從主題(topic)中獲取訊息進行消費。/**
* 測試kafka生產者
*/@restcontroller
public class testkafkaproducercontroller
}
yml配置檔案主要是配置kafka的服務位址。/**
* kafka消費者測試
*/@component
public class testconsumer
}
最spring:
kafka:
bootstrap-servers: 120.79.***.x:9092
producer:
key-serializer: org.apache.kafka.common.serialization.stringserializer
value-serializer: org.apache.kafka.common.serialization.stringserializer
consumer:
group-id: test
enable-auto-commit: true
auto-commit-interval: 1000
key-deserializer: org.apache.kafka.common.serialization.stringdeserializer
value-deserializer: org.apache.kafka.common.serialization.stringdeserializer
kafka系列教程01 如何學習kafka
資料流,如訊息傳遞系統 高效並實時 資料流安全地在分布式集群中複製儲存 kafka是用於構建實時資料管道和流應用程式。具有橫向擴充套件,容錯,wicked fast 快 等優點,並已在成千上萬家公司執行。apache kafka是訊息中介軟體的一種,我發現很多人不知道訊息中介軟體是什麼,在開始學習之...
kafka學習 一 搭建
此次學習所用的kakfa版本較老,為17年的版本 kafka所用 kafka 2.11 0.10.1.1.tgz zookepper zookeeper 3.4.8.tar.gz jdk1.8 setup 二.安裝 檔案都放 opt下 tar zxvf zookeeper 3.4.8.tar.gz ...
kafka中文教程
本網翻譯整理apache kafka,提供整理apache kafka的完整學習文件。資料流,如訊息傳遞系統 高效並實時 資料流安全地在分布式集群中複製儲存 kafka是用於構建實時資料管道和流應用程式。具有橫向擴充套件,容錯,wicked fast 快 等優點,並已在成千上萬家公司執行。apach...