Apache項(xiàng)目, 分布式消息應(yīng)用, 具有很高的擴(kuò)展性, 高的吞吐量, 大數(shù)據(jù)中扮演著很重要的角色
下載地址:
http://kafka.apache.org/downloads
版本號(hào):?
kafka_2.11-0.11.0.2
解壓和修改配置文件
解壓到當(dāng)前目錄下:?
$ tar -zxvf?kafka_2.11-0.11.0.2.tgz -C ./
進(jìn)入到config目錄下:?
$ vi server.properties
#打開(kāi)注釋, 表示, topic可以刪除
delete.topic.enable=true
# zookeeper地址:多個(gè)是用 "," 隔開(kāi)
zookeeper.connect=hadoop106:2181,hadoop107:2181,hadoop108:2181
#設(shè)置位置標(biāo)識(shí)(這里我配置的是我機(jī)器的ip號(hào))
broker.id=106
#設(shè)置log生成地址(絕對(duì)路徑)
log.dirs=/opt/module/kafka_2.11-0.11.0.2/kafkaLogs
退出vi
在kafka目錄下穿件一個(gè)文件夾存放log日志
$ mkdir kafkaLogs
scp 分發(fā)到其他機(jī)器上, 注意: broker.id的其他機(jī)器上需要修改, 集群中必須唯一.
啟動(dòng):(分別在集群機(jī)器上后臺(tái)啟動(dòng))
$?bin/kafka-server-start.sh config/server.properties 1>dev/null 2>&1
$?bin/kafka-server-start.sh -daemon config/server.properties
停止: (分別在集群的其他機(jī)器上停止)
$?bin/kafka-server-stop.sh?
演示功能: (這里使用機(jī)器號(hào)hadoop106做演示, 當(dāng)然集群下使用其他的機(jī)器一樣的效果)
一. 創(chuàng)建topic
$?bin/kafka-topic.sh --zookeeper hadoop106:2181 --create --replication-factor 3 --partitions 3 --topic topic_name
1.replication-factor : 副本數(shù)量
2.partitions : 分區(qū)數(shù)量
3.topic : 定義topic名稱
二. 查看topic列表
$?bin/kafka-topic.sh --zookeeper hadoop106 --list
三. 刪除topic
$?bin/kafka-topic.sh --zookeeper hadoop106 --delete --topic topic_name
四. 生產(chǎn)者producer (注意: 端口號(hào)9092是producer端口號(hào))
$?bin/kafka-console-producer.sh --broker-list hadoop106:9092 --topic topic_name
五. 消費(fèi)者consumer(把所有的消息打印到控制臺(tái)上)
$?bin/kafka-console-consumer.sh --zookeeper hadoop106:2181?--from-beginning --topic topic_name
六.查看topic詳細(xì)信息
$?bin/kafka-topics.sh --zookeeper hadoop106:2181 --describe --topic topic_name
在部署kafka應(yīng)用是, 需要注意的是, kafka和zookeeper是強(qiáng)依賴關(guān)系, 必須配合zookeeper集群部署, 這里只是簡(jiǎn)單部署引用和演示, 具體方便如果想深究的話, 各位小伙伴可以結(jié)合官方開(kāi)發(fā)文檔, 協(xié)助開(kāi)發(fā)學(xué)習(xí), 后期還會(huì)加入kafka streaming的方法演示, 請(qǐng)期待...
以下了解Kafka消費(fèi)過(guò)程
消費(fèi)分區(qū)(partition):
kafka的模型, 和rokectMQ基本一致, 生產(chǎn)者在寫(xiě)入消息過(guò)程中, 會(huì)根據(jù)該消息的topic的生產(chǎn)過(guò)程中設(shè)置的屬性, 寫(xiě)入到分區(qū)中, 理論上分區(qū)是partition Log, 消息會(huì)將數(shù)據(jù)寫(xiě)入到Log日志中, 由于消息是異步發(fā)送的, 而且是順序消費(fèi), 每一個(gè)分區(qū)都是一個(gè)獨(dú)立的, 有序的, 不可變的記錄序號(hào)列, 所以分區(qū)帶來(lái)的是很高的擴(kuò)展性, 分區(qū)會(huì)根據(jù)數(shù)據(jù)的大小長(zhǎng)度, 進(jìn)行分區(qū)消費(fèi).?
消費(fèi)副本(replication):
在分布式的集群中, 數(shù)據(jù)副本可以起到集群宕機(jī)的情況下, 其他機(jī)器可以正常的消費(fèi), 不影響應(yīng)用的消費(fèi), 在沒(méi)有副本的狀態(tài)下, 一旦broker.id宕機(jī), 那么可能導(dǎo)致生產(chǎn)應(yīng)用的崩潰或者業(yè)務(wù)數(shù)據(jù)的丟失等等, 為了避免這種情況, 我們可以進(jìn)行分區(qū), 同時(shí)producer也不能再將數(shù)據(jù)存于其上的patition, 引入replication之后盛杰,同一個(gè)partition可能會(huì)有多個(gè)replication坏瘩,而這時(shí)需要在這些replication之間選出一個(gè)leader疤孕,producer和consumer只與這個(gè)leader交互,其它replication作為follower從leader 中復(fù)制數(shù)據(jù).?