kafka

Kafka

消息隊列

含義:消息隊列技術是分佈式應用間交換信息的一種技術

通訊方式

點對點

多點廣播

發佈/訂閱

集羣

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)。

交互流程

  1. kafka可存儲的信息格式
    信息是一個字節數組,程序員可以在這些字節數組中存儲任何對象,支持的數據格式包括 String、JSON、Avro

  2. 信息模型
    消息模型可以分爲兩種, 隊列和發佈-訂閱式。 隊列的處理方式是 一組消費者從服務器讀取消息,一條消息只有其中的一個消費者來處理。在發佈-訂閱模型中,消息被廣播給所有的消費者,接收到消息的消費者都可以處理此消息。Kafka爲這兩種模型提供了單一的消費者抽象模型: 消費者組

同一個組內的消費者,是按照隊列的方式來接收。不同組之間,是按照發布訂閱方式來接收。

  1. 可靠性保證
    保序
    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

使用方法

kafka 快速入門

  • 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 manager

技術選型

IBM KAFKA

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。

發佈了46 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章