kafka入門安裝和使用

962721775y發表於2018-11-07

Kafka教程

簡介

1.訊息中介軟體介紹

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

2.訊息中介軟體特點

  1. 採用非同步處理模式:
    訊息傳送者可以傳送一個訊息而無須等待響應。訊息傳送者將訊息傳送到一條虛擬的通道(主題或者佇列)上,訊息接收者則訂閱或者監聽該通道。一條訊息可能最終轉發給一個或多個訊息接收者,這些接收者都無需對訊息傳送者做出同步回應。整個過程是非同步的。 比如使用者資訊註冊。註冊完成後過段時間傳送郵件或者簡訊。
  2. 應用程式和應用程式呼叫關係為鬆耦合關係:
    傳送者和接收者不必要了解對方、只需要確認訊息 傳送者和接收者不必同時線上 比如線上交易系統為了保證資料的最終一致,在支付系統處理完成後會把支付結果放到資訊中介軟體裡通知訂單系統修改訂單支付狀態。兩個系統通過訊息中介軟體解耦。

3.Kafka介紹

        Apache kafka是訊息中介軟體的一種,舉個例子,生產者消費者,生產者生產雞蛋,消費者消費雞蛋,生產者生產一個雞蛋,消費者就消費一個雞蛋,假設消費者消費雞蛋的時候噎住了(系統當機了),生產者還在生產雞蛋,那新生產的雞蛋就丟失了。再比如生產者很強勁(大交易量的情況),生產者1秒鐘生產100個雞蛋,消費者1秒鐘只能吃50個雞蛋,那要不了一會,消費者就吃不消了(訊息堵塞,最終導致系統超時),消費者拒絕再吃了,”雞蛋“又丟失了,這個時候我們放個籃子在它們中間,生產出來的雞蛋都放到籃子裡,消費者去籃子裡拿雞蛋,這樣雞蛋就不會丟失了,都在籃子裡,而這個籃子就是”kafka“。 雞蛋其實就是“資料流”,系統之間的互動都是通過“資料流”來傳輸的(就是tcp、http什麼的),也稱為報文,也叫“訊息”。 訊息佇列滿了,其實就是籃子滿了,”雞蛋“ 放不下了,那趕緊多放幾個籃子,其實就是kafka的擴容。 現在知道kafka是幹什麼的了吧,它就是那個"籃子"。

4.kafka名詞解釋

  • producer:生產者,就是它來生產“雞蛋”的。
  • consumer:消費者,生出的“雞蛋”它來消費。
  • topic:你把它理解為標籤,生產者每生產出來一個雞蛋就貼上一個標籤(topic),消費者可不是誰生產的“雞蛋”都吃的,這樣不同的生產者生產出來的“雞蛋”,消費者就可以選擇性的“吃”了。
  • broker:就是籃子了。 

    一定要學會抽象的去思考,上面只是屬於業務的角度,如果從技術角度,topic標籤實際就是佇列,生產者把所有“雞蛋(訊息)”都放到對應的佇列裡了,消費者到指定的佇列裡取。

入門配置

1.Ubuntu下安裝和使用

  • 下載地址:http://kafka.apache.org/downloads

 

  • 把tgz包放到opt目錄下面

  • 解壓安裝包到/opt/kafka目錄下

  • 進入到/opt/kafka/kafka_2.11-2.0.0目錄下啟動kafka自帶的zookeeper

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

 

  • 啟動zookeeper成功,2181埠

 

  • 開啟另一個終端檢視2181埠已經被監聽

 

  • 箭頭就是zookeeper開啟的服務

 

  • 用下面命令啟動kafka,9092埠

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

  • 再開啟另一個終端檢視9092埠已經被監聽,zookeeper埠也把kafka服務載入進去

 

  • 輸入jps命令發現服務都開啟了

  • 建立一個主題,名字叫test1

    bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic test1 --partitions 3 --replication-factor 1

 

  • 檢視test1主題被建立成功,建立了三個Partition

 

  • 啟動生產者(producer),在生產者中傳送的訊息,會儲存在broker中,需要消費者接收這些訊息。

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

 

  • 啟動消費者(consumer),消費者接收到,剛剛生產者輸出的資訊

    bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1

 

 

  • 檢視生產者的歷史資訊

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

 

  • kafka的預設埠是9092,在config/server.properties也可以修改這裡去掉#自己定義

  • zookeeper的預設埠是2181,在config/zookeeper.propertie也可以修改這裡自己定義

 

不用kafka自帶的zookeeper,下載一個zookeeper來啟動

 

  • 解壓到opt下

 

  • 啟動zookeeper

    bin/zkServer.sh start conf/zoo_sample.cfg

 

  • 檢視狀態

    bin/zkServer.sh status conf/zoo_sample.cfg

  • 啟動成功

  • 然後像上面一樣啟動kafka就行了

 

相關文章