kafka技術架構、執(zhí)行流程,部署及實例應用

1、kafka的設計思想

kafka是一個分布式,多分區(qū),多副本,多發(fā)布者/訂閱者的,基于zookeeper協(xié)調的消息系統(tǒng)。主要功能有3個:

  • 發(fā)布和訂閱消息流,這個功能類似于消息隊列;
  • 以容錯的方式記錄消息流,存儲消息流文件中;
  • 可以在消息發(fā)布的時候進行數據處理。

2、kafka的技術架構


kafka集群一般由多個kafka實例組成,每個實例(server)成為broker。kafka根據消息Topic進行歸類,發(fā)送消息者為Producer,消息接受者為Consumer。Producer將數據生產出來,交給 broker 陣列進行存儲,Consumer需要消費數據了,就從broker中去拿數據,然后完成一系列對數據的處理操作。
需要注意的是,producer到broker的過程是push,producer有數據就推送到broker,consumer到broker的過程是pull,是consumer主動去拉數據,而不是broker把數據發(fā)送到consumer的。



kafka集群多個broker協(xié)同工作,被producer和consumer頻繁調用,是通過zookeeper管理協(xié)調請求和轉發(fā)完成的,依賴于zookeeper保存的集群meta信息來保證系統(tǒng)的可用性。Kafka使用zookeeper作為其分布式協(xié)調框架,將消息生產、消息存儲、消息消費過程結合,確保生產者、消費者、broker在無狀態(tài)的情況下,建立起生產/消費訂閱關系,并實現生產者與消費者的負載均衡。

3、kafka的執(zhí)行流程

kafka業(yè)務執(zhí)行流程:

  • 啟動zookeeper的server端(Server2),它維持了一張inf-list表,記錄了各個集群節(jié)點的 IP、端口等信息。
  • 啟動kafka的server端(Server1),它開啟broker服務,為producer和consumer提供數據讀寫調用。
  • Producer生產者(Server3和Server4),如果生產了數據,會先通過zookeeper找到broker,然后將數據存放到broker上。
  • Consumer消費者(Server1),如果要消費數據,會先通過zookeeper找到broker,然后消費。

執(zhí)行流程圖中,Server1、Server2可以部署在一臺機器,也可以分開,或配置zookeeper集群。Server3、Server4、Server5必須配置zookeeper的地址作為zkClient,這之間連接都需要zookeeper來進行分發(fā)。

4、kafka部署

1、訪問kafka官網 http://kafka.apache.org/downloads,下載最新的二進制安裝包,如選擇版本kafka_2.13-3.0.1.tgz。
2、kafka需要java運行環(huán)境,確保部署主機安裝了jdk1.8版。
3、解壓kafka到安裝目錄/usr/kafka_2.13,配置文件在config子目錄。
4、修改consumer.properites、producer.properties文件,配置生產者和消費者,一般默認的即可。
5、修改server.properties文件,來配置kafka服務器端:broker.id值為服務端ID,集群中各節(jié)點必須唯一;listeners值為kafka服務地址,本機訪問默認為localhost:9092;zookeeper.connect值為zookeeper連接地址,kafka內置zookeeper為localhost:2181。
6、使用kafka內置的zookeeper,單機部署方式,啟動過程如下:

bin/zookeeper-server-start.sh config/zookeeper.properties  #啟動zookeeper服務
bin/kafka-server-start.sh config/server.properties  #啟動kafka服務

5、kafka實例應用

1、創(chuàng)建一個topic
打開終端,新建名為test的topic,命令輸入:

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

創(chuàng)建topic后,查看創(chuàng)建的topic,命令輸入:

bin/kafka-topics.sh --list --zookeeper localhost:2181

2、創(chuàng)建一個消息消費者
打開終端,新建test名稱topic的消費者,命令輸入:

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

消費者創(chuàng)建后,因為沒有發(fā)送任何數據,執(zhí)行后沒有打印輸出。不要關閉這個終端,接下來打開一個新的終端,創(chuàng)建一個消息生產者。

3、創(chuàng)建一個消息生產者
打開一個新的終端,新建test名稱topic的生產者,命令輸入:

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

命令執(zhí)行完畢,會進入消息編輯器頁面,我們發(fā)送一條消息,回到消費者終端??梢钥吹浇K端打印出我們發(fā)送的消息。

附、常規(guī)操作命令:

bin/kafka-topics.sh --zookeeper localhost:2181 --list #列出所有主題

bin/kafka-topics.sh --zookeeper localhost:2181 --describe #列出所有主題的詳細信息,加--topic my-topic查看具體topic

bin/kafka-topics.sh --zookeeper localhost:2181 --create --replication-factor 1 --partitions 8 --topic my-topic #創(chuàng)建my-topic主題,1副本,8分區(qū)

bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic my-topic --partitions 16 #增加分區(qū),注意:分區(qū)無法被刪除

bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic my-topic #刪除主題

bin/kafka-topics.sh --new-consumer --bootstrap-server localhost:9092 --list #列出消費者群組

bin/kafka-topics.sh --new-consumer --bootstrap-server localhost:9092 --describe --group my-consumer #列出my-consumer消費者群組詳細信息

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容