1. 程式人生 > >分散式訊息佇列-Kafka

分散式訊息佇列-Kafka

我們的資料,常見的情況下,是源源不斷的產生的,有時候會產生大量的資料,但是資料的接受方,可能一下無法處理那麼大的併發量。所以,一般採用的方式是訊息佇列的方式。

在大資料的領域裡,我們可能不僅僅要考慮資料的平穩過渡問題,我們還要考慮不同的型別的資料的接受和處理問題。並且還要保證資料的可靠性,以及一定的資料回滾能力。這就是我們的分散式訊息佇列Kafka需要做的事情。

Kafka的結構模型

在這裡插入圖片描述

如圖所示,Kafka的設計,是一種生產者消費者的模型。

producer不斷的產生資料。

kafka儲存producer傳遞的資料。

consumer把kafka中快取的資料進行消費。consumer會主動的向kafka拉取資料,而不是被主動推送資料的。

topic是kafka進行訊息傳遞的方式,每一個topic都會儲存到不同的patition中,一般而言,會有三個副本的patition。這三個副本分別放到不同的三個Broker上。每次儲存一個topic的時候,都會產生一個隨機的數,來確定第一個副本到底要存放到哪一個broker上面。這樣的做法有利於負載均衡。

Kafka的啟動

第一步,先啟動zookeeper。
在kafka的安裝目錄下,執行

bin/zookeeper-server-start.sh config/zookeeper.properties

在啟動Kafka的broker:

bin/kafka-server-start.sh -daemon config/server.propertes

執行jps命令檢視zookeeper和kafka的啟動情況。
建立kafka的topic:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partition 5 --topic test --config delete.retention.ms=172800000

生產資料:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

消費資料:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

Kafka的Java Api

一般常用的類:KafkaProducer,Producer,ProducerRecord,Consumer,ConsumerRecord。
使用的過程中,一般經歷這麼幾個過程。

第一步,配置props。

Properties props = new Properties()

第二步,例項化生產者producer。

Producer producer = new KafkaProducer(props)

第三步,傳送資料

producer.send(new ProducerRecord(topic: "test", Interger.toString(1), Interger.toString(1)))