Kafka
消息隊列
含義:消息隊列技術是分佈式應用間交換信息的一種技術
通訊方式
點對點
多點廣播
發佈/訂閱
集羣
kafka原理
作爲一層中間中間存儲介質,隔離生產者和消費者。
名詞解釋
Broker:Kafka 集羣包含一個或多個服務器,這種服務器被稱爲 broker
Topic:每條發佈到 Kafka 集羣的消息都有一個類別,這個類別被稱爲 Topic。(物理上不同 Topic 的消息分開存儲,邏輯上一個 Topic 的消息雖然保存於一個或多個 broker 上,但用戶只需指定消息的 Topic 即可生產或消費數據而不必關心數據存於何處)。
Partition:Partition 是物理上的概念,每個 Topic 包含一個或多個 Partition。
Producer:負責發佈消息到 Kafka broker。
Consumer:消息消費者,向 Kafka broker 讀取消息的客戶端。
Consumer Group:每個 Consumer 屬於一個特定的 Consumer Group(可爲每個 Consumer 指定 group name,若不指定 group name 則屬於默認的 group)。
交互流程
kafka可存儲的信息格式
信息是一個字節數組,程序員可以在這些字節數組中存儲任何對象,支持的數據格式包括 String、JSON、Avro信息模型
消息模型可以分爲兩種, 隊列和發佈-訂閱式。 隊列的處理方式是 一組消費者從服務器讀取消息,一條消息只有其中的一個消費者來處理。在發佈-訂閱模型中,消息被廣播給所有的消費者,接收到消息的消費者都可以處理此消息。Kafka爲這兩種模型提供了單一的消費者抽象模型: 消費者組
同一個組內的消費者,是按照隊列的方式來接收。不同組之間,是按照發布訂閱方式來接收。
- 可靠性保證
保序
topic配置了複製因子( replication facto)爲N, 那麼可以允許N-1服務器當掉而不丟失任何已經增加的消息
配置方法
- 單機版
broker配置文件
config/server.properties
啓動zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
啓動kafka
bin/kafka-server-start.sh config/server.properties
- 集羣版本
cp config/server.properties config/server-1.properties config/server-2.properties
分別啓動這兩個kafka
bin/kafka-server-start.sh config/server-1.properties &
config/server-1.properties:
broker.id=1
port=9093
log.dir=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
port=9094
log.dir=/tmp/kafka-logs-2
使用方法
- list topic
bin/kafka-topics.sh –list –zookeeper 10.18.210.207:2181,10.18.210.208:2181,10.18.210.209:2181
- create topic
bin/kafka-topics.sh –create –zookeeper 10.18.210.207:2181,10.18.210.208:2181,10.18.210.209:2181 –replication-factor 1 –partitions 1 –topic basp_basp
bin/kafka-topics.sh –describe –zookeeper 10.18.210.207:2181,10.18.210.208:2181,10.18.210.209:2181 –topic ws_vod
- producer
bin/kafka-console-producer.sh –broker-list 10.18.210.207:9092,10.18.210.208:9093,10.18.210.209:9094 –topic test_test
- consumer
bin/kafka-console-consumer.sh –zookeeper 10.18.210.207:2181,10.18.210.208:2181,10.18.210.209:2181 –topic test_topic [–from-beginning]
- delete topic
stop kafka 集羣要每天機器都要關閉
./bin/kafka-server-stop.sh ./config/server-1.properties
刪除zookeeper 中的topic記錄
-# /usr/local/share/zookeeper/bin/zkCli.sh -server 10.18.210.207:2181,10.18.210.208:2181,10.18.210.209:2181
rm -rf /brokers/topics/* 或者 deleteall /brokers/topics/sometopic
刪除kafka 的日誌項
cd /tmp/kafa-logs
rm -rf topics(topic對應的文件夾) 注意是集羣中多臺機器
集羣監控
技術選型
kafka與flume區別
Kafka 是一個通用型系統。你可以有許多的生產者和消費者分享多個主題。相反地,Flume 被設計成特定用途的工作,特定地向 HDFS 和 HBase 發送出去。
Flume 擁有許多配置的來源 (sources) 和存儲池 (sinks)。然後,Kafka 擁有的是非常小的生產者和消費者環境體系,Kafka 社區並不是非常支持這樣。
Flume 可以在攔截器裏面實時處理數據。這個特性對於過濾數據非常有用。Kafka 需要一個外部系統幫助處理數據
無論是 Kafka 或是 Flume,兩個系統都可以保證不丟失數據。
Flume 和 Kafka 可以一起工作的。如果你需要把流式數據從 Kafka 轉移到 Hadoop,可以使用 Flume 代理 (agent),將 kafka 當作一個來源 (source),這樣可以從 Kafka 讀取數據到 Hadoop。