1. 程式人生 > >Kafka系列 —— 入門及應用場景 & 部署 & 簡單測試

Kafka系列 —— 入門及應用場景 & 部署 & 簡單測試

Kafka系列為自己學習與使用Kafka中遇到的問題與總結。本系列將介紹如下內容:

  • Kafka入門及應用場景 & 部署 & 簡單測試
  • Kafka核心概念
  • Kafka常用命令
  • Kafka監控
  • Kafka消費語義分析
  • Flume + Kafka + SparkStreaming打造通用的流處理基礎平臺
  • 生產案例分享

是一個長期更新的系列,希望自己能夠堅持:)

入門及應用場景

官網描述所發生的改變

在這裡插入圖片描述
分散式的流式平臺;原來叫訊息平臺,這是因為現在kafka加入了stream,所以有了說法上的改變

3個特性

在這裡插入圖片描述
一個流式平臺有以下3個特性:

  • 釋出和訂閱流式的訊息,類似於訊息佇列
  • 以高容錯的方式儲存訊息
  • 處理流式訊息

2種應用場景

在這裡插入圖片描述
Kafka一般有2種應用場景:

  • 離線場景:資料寫到Kafka,後面寫個應用程式然後每個批次去消費它,也是可以的美圖就是這樣在做,資料接到Kafka之後,然後基於MapReduce構建ETL操作,將資料落到HDFS上
    一般來說,使用Kafka對接實時處理框架比較多
  • 構建實時的流式應用,指的是Kafka stream,在生產中用的不是很多

常見的應用場景:作為訊息中介軟體,一般部署在流式元件的前一個,主要為了避免高峰期計算來的壓力

部署

Zookeeper簡介&部署

簡介

Zookeeper官網:http://zookeeper.apache.org/


作用:Zookeeper是一個協調服務,一般會用zk來做HA
版本:生產上Zookeeper的版本是3.4.6
機器數量:生產叢集小於100臺,Zookeeper部署7臺
生產叢集大於100臺,Zookeeper部署7臺 或 9臺
注意:並不是Zookeeper的機器越多越好,因為在選舉的時候如果機器很多,選舉肯定是很繁忙的(個人經驗)

遇到問題可以去檢視zookeeper.out,有具體的報錯資訊,可以進行排查
也可以使用ps –ef|grep zookeeper去檢視程序是否存活

部署

使用

HDFS HA、YARN HA都依賴於Zookeeper,Kafka、HBase也依賴於Zookeeper

進入到客戶端的相關操作:

  • zkCli.sh進入到當前機器的客戶端介面,localhost模式
  • 指定其中一臺zookeeper地址進入
    命令:ZooKeeper -server host:port
    在這裡插入圖片描述
  • 命令幫助,進入console,輸入help
    在這裡插入圖片描述
  • 幾個簡單的命令介紹:
    ls /
    ls /zookeeper
    rmr path

jdk和scala部署

jdk的部署路徑:/usr/java
JDBC的部署路徑:/usr/share/java
原因:CDH環境中server端和agent端會優先讀取這個路徑,如果不這樣配置會很麻煩
使用CDH建議這樣配置
Scala版本:2.11.8

Kafka部署

版本介紹

Kafka版本:0.8.x 0.10.x
主要是這兩個分支,為什麼是這兩個,結合SparkStreaming官網:
https://spark.apache.org/docs/2.2.0/streaming-kafka-integration.html
選用版本:kafka_2.11-0.10.0.1.tgz
原因:後續SparkStreaming對接Kafka使用direct模式

部署步驟

叢集部署

需要修改的配置檔案:$KAFKA_HOMR/config/server.properties

broker.id=1
port=9092
host.name=xxxx
log.dirs=/opt/software/kafka/logs
zookeeper.connect=xxxx:2181,xxxx:2181,xxxx:2181/kafka

3臺機器,對應修改broker.id和host.name即可
且在每臺機器上去建立對應的log.dirs路徑即可

環境變數配置

配置在/etc/profile下,具體步驟略

簡單測試

啟動/停止

每臺機器執行:

nohup kafka-server-start.sh config/server.properties &

後臺啟動,以防Kafka程序掛掉

停止命令:

bin/kafka-server-stop.sh

模擬實驗

Kafka建立完成之後,在zookeeper中的目錄是怎麼樣的呢?如下圖:
在這裡插入圖片描述
該操作是沒有指定 /kafka 目錄的情況,因此都是散亂的目錄;指定後就都在 /kafka 下了
修改server.properties:

zookeeper.connect=xxxx:2181,xxxx:2181,xxxx:2181/kafka

這樣操作後,會將對應的資訊寫到zookeeper中的/kafka目錄下

建立topic:
在這裡插入圖片描述

開啟生產者:
在這裡插入圖片描述

開啟消費者:
在這裡插入圖片描述

在生產者的console下輸入,即開始向Kafka中寫入資料:
在這裡插入圖片描述

消費者開始消費:
在這裡插入圖片描述

常見的架構

Kafka部署完成的程序,實質上是一個broker
一般的流程:producer --> broker cluster --> consumer
一般的架構:Flume --> Kafka --> Spark Streaming
以生產為例:
在這裡插入圖片描述
xx日誌和xx日誌用的同一套Kafka叢集,針對不同的日誌設立不同的topic
可以抽象的將topic理解為資料夾,如果指定了topic為yy,那麼所有對應的資料都會在yy下面;而計算程式在程式碼中就會指定到對應的topic中去讀取資料,進行消費
具體含義下面的文章中會介紹