Apache項目, 分布式消息應(yīng)用, 具有很高的擴展性, 高的吞吐量, 大數(shù)據(jù)中扮演著很重要的角色
下載地址:
http://kafka.apache.org/downloads
版本號:?
kafka_2.11-0.11.0.2
解壓和修改配置文件
解壓到當(dāng)前目錄下:?
$ tar -zxvf?kafka_2.11-0.11.0.2.tgz -C ./
進入到config目錄下:?
$ vi server.properties
#打開注釋, 表示, topic可以刪除
delete.topic.enable=true
# zookeeper地址:多個是用 "," 隔開
zookeeper.connect=hadoop106:2181,hadoop107:2181,hadoop108:2181
#設(shè)置位置標(biāo)識(這里我配置的是我機器的ip號)
broker.id=106
#設(shè)置log生成地址(絕對路徑)
log.dirs=/opt/module/kafka_2.11-0.11.0.2/kafkaLogs
退出vi
在kafka目錄下穿件一個文件夾存放log日志
$ mkdir kafkaLogs
scp 分發(fā)到其他機器上, 注意: broker.id的其他機器上需要修改, 集群中必須唯一.
啟動:(分別在集群機器上后臺啟動)
$?bin/kafka-server-start.sh config/server.properties 1>dev/null 2>&1
$?bin/kafka-server-start.sh -daemon config/server.properties
停止: (分別在集群的其他機器上停止)
$?bin/kafka-server-stop.sh?
演示功能: (這里使用機器號hadoop106做演示, 當(dāng)然集群下使用其他的機器一樣的效果)
一. 創(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 (注意: 端口號9092是producer端口號)
$?bin/kafka-console-producer.sh --broker-list hadoop106:9092 --topic topic_name
五. 消費者consumer(把所有的消息打印到控制臺上)
$?bin/kafka-console-consumer.sh --zookeeper hadoop106:2181?--from-beginning --topic topic_name
六.查看topic詳細信息
$?bin/kafka-topics.sh --zookeeper hadoop106:2181 --describe --topic topic_name
在部署kafka應(yīng)用是, 需要注意的是, kafka和zookeeper是強依賴關(guān)系, 必須配合zookeeper集群部署, 這里只是簡單部署引用和演示, 具體方便如果想深究的話, 各位小伙伴可以結(jié)合官方開發(fā)文檔, 協(xié)助開發(fā)學(xué)習(xí), 后期還會加入kafka streaming的方法演示, 請期待...
以下了解Kafka消費過程

消費分區(qū)(partition):
kafka的模型, 和rokectMQ基本一致, 生產(chǎn)者在寫入消息過程中, 會根據(jù)該消息的topic的生產(chǎn)過程中設(shè)置的屬性, 寫入到分區(qū)中, 理論上分區(qū)是partition Log, 消息會將數(shù)據(jù)寫入到Log日志中, 由于消息是異步發(fā)送的, 而且是順序消費, 每一個分區(qū)都是一個獨立的, 有序的, 不可變的記錄序號列, 所以分區(qū)帶來的是很高的擴展性, 分區(qū)會根據(jù)數(shù)據(jù)的大小長度, 進行分區(qū)消費.?
消費副本(replication):
在分布式的集群中, 數(shù)據(jù)副本可以起到集群宕機的情況下, 其他機器可以正常的消費, 不影響應(yīng)用的消費, 在沒有副本的狀態(tài)下, 一旦broker.id宕機, 那么可能導(dǎo)致生產(chǎn)應(yīng)用的崩潰或者業(yè)務(wù)數(shù)據(jù)的丟失等等, 為了避免這種情況, 我們可以進行分區(qū), 同時producer也不能再將數(shù)據(jù)存于其上的patition, 引入replication之后,同一個partition可能會有多個replication,而這時需要在這些replication之間選出一個leader,producer和consumer只與這個leader交互,其它replication作為follower從leader 中復(fù)制數(shù)據(jù).?
寫入流程:
