1. 程式人生 > 其它 >kafka-2

kafka-2

Kafka介紹及安裝部署

本節內容:

  • 訊息中介軟體
  • 訊息中介軟體特點
  • 訊息中介軟體的傳遞模型
  • Kafka介紹
  • 安裝部署Kafka叢集
  • 安裝Yahoo kafka manager
  • kafka-manager新增kafka cluster

一、訊息中介軟體

訊息中介軟體是在訊息的傳輸過程中儲存訊息的容器。訊息中介軟體在將訊息從訊息生產者到消費者時充當中間人的作用。佇列的主要目的是提供路由並保證訊息的傳送;如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功地傳遞它為止,當然,訊息佇列儲存訊息也是有期限的。

二、訊息中介軟體特點

1. 採用非同步處理模式
訊息傳送者可以傳送一個訊息而無須等待響應。訊息傳送者將訊息傳送到一條虛擬的通道(主題或者佇列)上,訊息接收者則訂閱或者監聽該通道。一條訊息可能最終轉發給一個或多個訊息接收者,這些接收者都無需對訊息傳送者做出同步迴應。整個過程是非同步的。

  • 比如使用者資訊註冊。註冊完成後過段時間傳送郵件或者簡訊。

2. 應用程式和應用程式呼叫關係為鬆耦合關係

  • 傳送者和接收者不必要了解對方、只需要確認訊息
  • 傳送者和接收者不必同時線上

比如線上交易系統為了保證資料的最終一致,在支付系統處理完成後會把支付結果放到資訊中介軟體裡通知訂單系統修改訂單支付狀態。兩個系統通過訊息中介軟體解耦。

三、訊息中介軟體的傳遞模型

1. 點對點模型(PTP)
點對點模型用於訊息生產者和訊息消費者之間點對點的通訊。訊息生產者將訊息傳送到由某個名字標識的特定消費者。這個名字實際上對應於消費服務中的一個佇列(Queue),在訊息傳遞給消費者之前它被儲存在這個佇列中。佇列訊息可以放在記憶體中也可以是持久的,以保證在訊息服務出現故障時仍然能夠傳遞訊息。
點對點模型特性:

  • 每個訊息只有一個消費者
  • 傳送者和接受者沒有時間依賴
  • 接受者確認訊息接受和處理成功

2. 釋出—訂閱模型(Pub/Sub)

釋出者/訂閱者模型支援向一個特定的訊息主題生產訊息。0或多個訂閱者可能對接收來自特定訊息主題的訊息感興趣。在這種模型下,釋出者和訂閱者彼此不知道對方。這種模式好比是匿名公告板。這種模式被概括為:多個消費者可以獲得訊息。在釋出者和訂閱者之間存在時間依賴性。釋出者需要建立一個訂閱(subscription),以便能夠讓消費者訂閱。訂閱者必須保持持續的活動狀態以接收訊息,除非訂閱者建立了持久的訂閱。在這種情況下,在訂閱者未連線時釋出的訊息將在訂閱者重新連線時重新發布。
其實訊息中介軟體,像MySQL其實也可以作為訊息中介軟體,只要你把訊息中介軟體原理搞清楚,你會發現目前所有的儲存,包括NoSQL,只要支援順序性東西的,就可以作為一個訊息中介軟體。就看你怎麼去利用它了。就像redis裡面那個佇列list,就可以作為一個訊息佇列。
釋出—訂閱模型特性:

  • 每個訊息可以有多個訂閱者
  • 客戶端只有訂閱後才能接收到訊息
  • 持久訂閱和非持久訂閱

(1) 釋出者和訂閱者有時間依賴

接收者和釋出者只有建立訂閱關係才能收到訊息。

(2) 持久訂閱

訂閱關係建立後,訊息就不會消失,不管訂閱者是否線上。

(3) 非持久訂閱

訂閱者為了接收訊息,必須一直線上

當只有一個訂閱者時約等於點對點模式。

大部分情況下會使用持久訂閱。常用的訊息佇列有Kafka、RabbitMQ、ActiveMQ、metaq等。

四、Kafka介紹

Kafka是一種分散式訊息系統,由LinkedIn使用Scala編寫,用作LinkedIn的活動流(Activity Stream)和運營資料處理管道(Pipeline)的基礎,具有高水平擴充套件和高吞吐量。

目前越來越多的開源分散式處理系統如Apache flume、Apache Storm、Spark、Elasticsearch都支援與Kafka整合。

五、安裝部署Kafka叢集

1. 環境資訊

主機名 作業系統版本 IP地址 安裝軟體
log1 CentOS 7.0 114.55.29.86 JDK1.7、kafka_2.11-0.9.0.1
log2 CentOS 7.0 114.55.29.241 JDK1.7、kafka_2.11-0.9.0.1
log3 CentOS 7.0 114.55.253.15 JDK1.7、kafka_2.11-0.9.0.1

2. 安裝JDK1.7

3臺機器都需要安裝JDK1.7。

[root@log1 local]# mkdir /usr/java
[root@log1 local]# tar zxf jdk-7u80-linux-x64.gz -C /usr/java/
[root@log1 local]# vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@log1 local]# source /etc/profile

3. 安裝叢集

需要先安裝好Zookeeper叢集,見之前的文章《Zookeeper介紹及安裝部署》。

(1)建立訊息持久化目錄

[root@log1 ~]# mkdir /kafkaLogs

(2)下載解壓kafka,版本是kafka_2.11-0.9.0.1

[root@log1 local]# wget http://mirrors.cnnic.cn/apache/kafka/0.9.0.1/kafka_2.11-0.9.0.1.tgz
[root@log1 local]# tar zxf kafka_2.11-0.9.0.1.tgz

(3)修改配置

[root@log1 local]# cd kafka_2.11-0.9.0.1/config/
[root@log1 config]# vim server.properties
別想一下造出大海,必須先由小河川開始。