主頁 >  其他 > kafka詳解(架構、集群)-step1

kafka詳解(架構、集群)-step1

2021-09-14 11:38:46 其他

1. 訊息佇列(MQ)

1.1 什么是訊息佇列

訊息佇列不知道大家看到這個詞的時候,會不會覺得它是一個比較高端的技術,訊息佇列,一般我們會簡稱它為MQ(Message Queue). 訊息佇列是一種幫助開發人員解決系統間異步通信的中間件,常用于解決系統解耦和請求的削峰平谷的問題,

佇列(Queue):

Queue 是一種先進先出的資料結構,容器

訊息(Message):

不同應用之間傳送的資料,

訊息佇列:

我們可以把訊息佇列比作是一個存放訊息的容器,當我們需要使用訊息的時候可以取出訊息供自己使用,訊息佇列是分布式系統中重要 的組件,使用訊息佇列主要是為了通過異步處理提高系統性能和削峰、降低系統耦合性,佇列 Queue 是一種先進先出的資料結構,所以消 費訊息時也是按照順序來消費的,比如生產者發送訊息1,2,3...對于消費者就會按照1,2,3...的順序來消費,

MQ方式

1.2 訊息佇列的應用場景

訊息佇列在實際應用中包括如下四個場景:

  • 1) 應用耦合:多應用間通過訊息佇列對同一訊息進行處理,避免呼叫介面失敗導致整個程序失敗;
  • 2) 異步處理:多應用對訊息佇列中同一訊息進行處理,應用間并發處理訊息,相比串行處理,減少處理時間;
  • 3) 限流削峰:廣泛應用于秒殺或搶購活動中,避免流量過大導致應用系統掛掉的情況;
  • 4) 訊息驅動的系統:系統分為訊息佇列、訊息生產者、訊息消費者,生產者負責產生訊息,消費者(可能有多個)負責對訊息進行處理

下面詳細介紹上述四個場景以及訊息佇列如何在上述四個場景中使用

1.2.1 異步處理

具體場景:

用戶為了使用某個應用,進行注冊,系統需要發送注冊郵件并驗證短信,

對這兩個子系統操作的處理方式有兩種:串行及并行,

涉及到三個子系統:注冊系統、郵件系統、短信系統

1)串行方式:新注冊資訊生成后,先發送注冊郵件,再發送驗證短信;

2) 并行處理:新注冊資訊寫入后,由發短信和發郵件并行處理

在這種方式下,發短信和發郵件 需處理完成后再回傳給客戶端,

假設以上三個子系統處理的時間均為50ms,且不考慮網路延遲,則總的處理時間:

串行:50+50+50=150ms

并行:50+50 = 100ms

如果引入訊息佇列, 在來看整體的執行效率:

在寫入訊息佇列后立即回傳成功給客戶端,則總的回應時間依賴于寫入訊息佇列的時間,而寫入訊息佇列的時間本身是可以很快的,基本 可以忽略不計,因此總的處理時間為50ms,相比串行提高了2倍,相比并行提高了一倍;

1.2.2 應用耦合

具體場景:

用戶使用QQ相冊上傳一張圖片,人臉識別系統會對該圖片進行人臉識別,

一般的做法是,服務器接收到圖片后,圖片上傳系統立即呼叫人臉識別系統,

呼叫完成后再回傳成功,如下圖所示: 呼叫方式:webService、Http協議(HttpClient、RestTemplate)、Tcp協議(Dubbo)

該方法有如下缺點:

1) 人臉識別系統被調失敗,導致圖片上傳失敗;

2) 延遲高,需要人臉識別系統處理完成后,再回傳給客戶端,即使用戶并不需要立即知道結果;

3) 圖片上傳系統與人臉識別系統之間互相呼叫,需要做耦合;

若使用訊息佇列:

客戶端上傳圖片后,圖片上傳系統將圖片資訊批次寫入訊息佇列,直接回傳成功;

人臉識別系統則定時從訊息佇列中取資料,完成對新增圖片的識別,

圖片上傳系統并不需要關心人臉識別系統是否對這些圖片資訊的處理、以及何時對這些圖片資訊進行處理,

事實上,由于用戶并不需要立即知道人臉識別結果,人臉識別系統可以選擇不同的調度策略,按照閑時、忙時、正常時間,對佇列中的圖 片資訊進行處理,

1.2.3 限流削峰

具體場景:

購物網站開展秒殺活動,一般由于瞬時訪問量過大,服務器接收過大,會導致流量暴增,相關系統無法處理請求甚至崩潰,

而加入訊息佇列后,系統可以從訊息佇列中取資料,相當于訊息佇列做了一次緩沖,

該方法有如下優點

請求先入訊息佇列,而不是由業務處理系統直接處理,做了一次緩沖,極大地減少了業務處理系統的壓力;

佇列長度可以做限制,事實上,秒殺時,后入佇列的用戶無法秒殺到商品,這些請求可以直接被拋棄,回傳活動已結束或商品已售完信 息;

1.2.4 訊息事件驅動的系統

具體場景:

用戶新上傳了一批照片 ---->人臉識別系統需要對這個用戶的所有照片進行聚類 -------> 由對賬系統重新生成用戶的人臉索引(加快查 詢),

這三個子系統間由訊息佇列連接起來,前一個階段的處理結果放入佇列中,后一個階段從佇列中獲取訊息繼續處理,

該方法有如下優點:

避免了直接呼叫下一個系統導致當前系統失敗;

每個子系統對于訊息的處理方式可以更為靈活,可以選擇收到訊息時就處理,可以選擇定時處理,也可以劃分時間段按不同處理速度處 理;

1.3 訊息佇列的兩種模式

訊息佇列包括兩種模式,點對點模式(point to point, queue)和發布/訂閱模式(publish/subscribe,topic)

1.3.1 點對點模式

點對點模式下包括三個角色

  • 訊息佇列
  • 發送者 (生產者)
  • 接收者(消費者)

每個訊息都被發送到一個特定的佇列,接收者從佇列中獲取訊息,佇列保留著訊息,可以放在記憶體 中也可以持久化,直到他們被消費或超 時,

點對點模式特點:

  • 每個訊息只有一個消費者,一旦被消費,訊息就不再在訊息佇列中;
  • 發送者和接收者間沒有依賴性,發送者發送訊息之后,不管有沒有接收者在運行,都不會影響到發送者下次發送訊息;
  • 接收者在成功接收訊息之后需向佇列應答成功,以便訊息佇列洗掉當前接收的訊息;

1.3.2 發布/訂閱模式

發布/訂閱模式下包括三個角色:

  • 角色主題(Topic)
  • 發布者(Publisher)
  • 訂閱者(Subscriber)

訊息生產者(發布)將訊息發布到topic中,同時有多個訊息消費者(訂閱)消費該訊息,和點對點方式不同,發布到topic的訊息會被多個 訂閱者消費,

發布/訂閱模式特點:

  • 每個訊息可以有多個訂閱者;
  • 發布者和訂閱者之間有時間上的依賴性
  • 為了消費訊息,訂閱者必須保持在線運行,

1.4 訊息佇列實作機制

1.4.1 JMS

JMS(JAVA Message Service,Java訊息服務)是一個Java平臺中關于面向訊息中間件的API 允許應用程式組件基于JavaEE平臺創建、發送、接收和讀取訊息

是一個訊息服務的標準或者說是規范,是 Java 平臺上有關面向訊息中間件的技術規范

便于訊息系統中的 Java 應用程式進行訊息交換,并且通過提供標準的產生、發送、接收訊息的介面,簡化企業應用的開發,

JMS 訊息機制主要分為兩種模型:PTP 模型和 Pub/Sub 模型,

實作產品:Apache ActiveMQ

1.4.2 AMQP

AMQP,即Advanced Message Queuing Protocol,一個提供統一訊息服務的應用層標準高級訊息佇列協議,是應用層協議的一個開 放標準,為面向訊息的中間件設計,基于此協議的客戶端與訊息中間件可傳遞訊息,并不受客戶端/中間件不同產品,不同的開發語言等條 件的限制,Erlang中的實作有RabbitMQ等,

1.4.2 JMS VS AMQP

1.5常見的訊息佇列產品

綜合上面的材料得出以下兩點: (

1)中小型軟體公司:

建議選RabbitMQ.一方面,erlang語言天生具備高并發的特性,而且他的管理界面用起來十分方便,正所謂,成也蕭何,敗也蕭何!他的 弊端也在這里,雖然RabbitMQ是開源的,然而國內有幾個能定制化開發erlang的程式員呢?所幸,RabbitMQ的社區十分活躍,可以解決 開發程序中遇到的bug,這點對于中小型公司來說十分重要,不考慮rocketmq和kafka的原因是,一方面中小型軟體公司不如互聯網公司, 資料量沒那么大,選訊息中間件,應首選功能比較完備的,所以kafka排除,不考慮rocketmq的原因是,rocketmq是阿里出品,如果阿里 放棄維護rocketmq,中小型公司一般抽不出人來進行rocketmq的定制化開發,因此不推薦,

(2)大型軟體公司:

根據具體使用在rocketMq和kafka之間二選一,一方面,大型軟體公司,具備足夠的資金搭建分布式環境,也具備足夠大的資料量,針 對rocketMQ,大型軟體公司也可以抽出人手對rocketMQ進行定制化開發,畢竟國內有能力改JAVA原始碼的人,還是相當多的,至于kafka,根 據業務場景選擇,如果有日志采集功能,肯定是首選kafka了,

2. kafka的基本介紹

2.1 什么是Kafka

官網:http://kafka.apache.org/

Kafka是最初由Linkedin公司開發,是一個分布式、磁區的、多副本的、多訂閱者,基于zookeeper協調的分布式日志系統(也可以當做 MQ系統),常見可以用于web/nginx日志、訪問日志,訊息服務等等,Linkedin于2010年貢獻給了Apache基金會并成為頂級開源專案,

主要應用場景是:日志收集系統和訊息系統,

Kafka主要設計目標如下:

  • 以時間復雜度為O(1)的方式提供訊息持久化能力,即使對TB級以上資料也能保證常數時間的訪問性能,
    • 演算法復雜度:時間復雜度和空間復雜度
    • 以時間復雜度為O(1)的方式:常數時間運行和資料量的增長無關,假如操作一個鏈表,那么無論鏈表的大還是小,操作時間是一 樣的
  • 高吞吐率,即使在非常廉價的商用機器上也能做到單機支持每秒100K條訊息的傳輸,
    • 支持普通服務器每秒百萬級寫入請求
    • Memory mapped Files
  • 支持Kafka Server間的訊息磁區,及分布式消費,同時保證每個partition內的訊息順序傳輸,
  • 同時支持離線資料處理和實時資料處理,
  • Scale out:支持在線水平擴展

2.2 kafka的特點

(1)解耦,Kafka具備訊息系統的優點,只要生產者和消費者資料兩端遵循介面約束,就可以自行擴展或修改資料處理的業務程序,

(2)高吞吐量、低延遲,即使在非常廉價的機器上,Kafka也能做到每秒處理幾十萬條訊息,而它的延遲最低只有幾毫秒, (

3)持久性,Kafka可以將訊息直接持久化在普通磁盤上,且磁盤讀寫性能優異,

(4)擴展性,Kafka集群支持熱擴展,Kaka集群啟動運行后,用戶可以直接向集群添,

(5)容錯性,Kafka會將資料備份到多臺服務器節點中,即使Kafka集群中的某一臺加新的Kafka服務節點宕機,也不會影響整個系統的功 能,

(6)支持多種客戶端語言,Kafka支持Java、.NET、PHP、Python等多種語言,

(7) 支持多生產者和多消費者,

2.3 kafka的主要應用場景

3. kafka的架構

3.1 架構案例

Kafka Cluster:由多個服務器組成,每個服務器單獨的名字broker(掮客),

kafka broker:kafka集群中包含的服務器

Kafka Producer:訊息生產者、發布訊息到 kafka 集群的終端或服務,

Kafka consumer:訊息消費者、負責消費資料,

Kafka Topic: 主題,一類訊息的名稱,存盤資料時將一類資料存放在某個topci下,消費資料也是消費一類資料,

訂單系統:創建一個topic,叫做order,

用戶系統:創建一個topic,叫做user,

商品系統:創建一個topic,叫做product,

注意:Kafka的元資料都是存放在zookeeper中,

3.2 架構剖析

kafka架構的內部細節剖析:

說明:kafka支持訊息持久化,消費端為拉模型來拉取資料,消費狀態和訂閱關系有客戶端負責維護,訊息消費完 后,不會立即洗掉,會保 留歷史訊息,因此支持多訂閱時,訊息只會存盤一份就可以了,

  • Broker:kafka集群中包含一個或者多個服務實體,這種服務實體被稱為Broker
  • Topic:每條發布到kafka集群的訊息都有一個類別,這個類別就叫做Topic
  • Partition:磁區,物理上的概念,每個topic包含一個或多個partition,一個partition對應一個檔案夾,這個檔案夾下存盤partition的 資料和索引檔案,每個partition內部是有序的

3.3 關系解釋

Topic & Partition

  • Topic 就是資料主題,是資料記錄發布的地方,可以用來區分業務系統,
  • Kafka中的Topics總是多訂閱者模式,一個topic可以擁有一個或者多個消費者來訂閱它的資料,
  • 一個topic為一類訊息,每條訊息必須指定一個topic,
  • 對于每一個topic, Kafka集群都會維持一個磁區日志,
  • 如下圖 每個磁區都是有序且順序不可變的記錄集,并且不斷地追加到結構化的commit log檔案,
  • 磁區中的每一個記錄都會分配一個id號來表示順序,稱之為offset,offset用來唯一的標識磁區中每一條記錄,

在每一個消費者中唯一保存的元資料是offset(偏移量)即消費在log中的位置,偏移量由消費者所控制:通常在讀取記錄后,消費者會以線 性的方式增加偏移量 ,但是實際上,由于這個位置由消費者控制,所以消費者可以采用任何順序來消費記錄,例如,一個消費者可以重置到一個舊的偏移量,從 而重新處理過去的數 據;也可以跳過最近的記錄,從"現在"開始消費,

這些細節說明Kafka 消費者是非常廉價的—消費者的增加和減少,對集群或者其他消費者沒有多大的影響,

4. kafka集群環境搭建

ZooKeeper 作為給分布式系統提供協調服務的工具被 kafka 所依賴,在分布式系統中,消費者需要知道有哪些生產者是可用的,而如果 每次消費者都需要和生產者建立連接并測驗是否成功連接,那效率也太低了,顯然是不可取的,而通過使用 ZooKeeper 協調服務,Kafka 就能將 Producer,Consumer,Broker 等結合在一起,同時借助 ZooKeeper,Kafka 就能夠將所有組件在無狀態的條件下建立起生產者和 消費者的訂閱關系,實作負載均衡,

4.1 準備作業

kafka集群所需包

鏈接:https://pan.baidu.com/s/1rX6LuEbRk6fAYxiZ107cSg
提取碼:27fh

環境準備:

準備三臺服務器, 安裝jdk1.8 ,其中每一臺虛擬機的hosts檔案中都需要配置如下的內容

192.168.200.11 node1

192.168.200.12 node2

192.168.200.13 node3

1、修改IP地址

修改網卡組態檔 vi /etc/sysconfig/network-scripts/ifcfg-ens33

(1)bootproto=static,表示使用靜態IP

(2)onboot=yes,表示將網卡設定為開機啟用

(3)將原有的原有IP修改為192.168.200.11

注意: 修改ip地址后,還需修改ip映射與主機名

(4)重啟網路服務

service network restart

(5)安裝目錄創建

安裝包存放的目錄:/export/software
安裝程式存放的目錄:/export/servers
資料目錄:/export/data
日志目錄:/export/logs
創建各級目錄命令:
mkdir -p /export/servers/
mkdir -p /export/software/
mkdir -p /export/data/
mkdir -p /export/logs/

(6)修改host

(1)vi /etc/sysconfig/network
修改HOSTNAME=node1
(2)vim /etc/hostname

填寫主機名:node1

(3)vim /etc/hosts

執行命令”/etc/init.d/network restart“ 重啟hosts;

執行命令”cat /etc/hosts“可以查看到hosts檔案修改成功,

4.2 Zookeeper集群搭建

1. JDK安裝(略)

2.Linux 安裝Zookeeper,三臺Linux都安裝,以搭建Zookeeper集群

  • 上傳zookeeper-3.4.14.tar.gz
  • 解壓并配置zookeeper(配置data目錄,集群節點)
# node1操作
# 解壓到/opt目錄
tar -zxf zookeeper-3.4.14.tar.gz -C /opt
# 配置
cd /opt/zookeeper-3.4.14/conf
# 組態檔重命名后生效
cp zoo_sample.cfg zoo.cfg
#編輯
vi zoo.cfg
# 設定資料目錄
dataDir=/var/lagou/zookeeper/data
# 添加
server.1=node1:2881:3881
server.2=node2:2881:3881
server.3=node3:2881:3881
# 退出vim
mkdir -p /var/lagou/zookeeper/data
echo 1 > /var/lagou/zookeeper/data/myid
# 配置環境變數
vi /etc/profile
# 添加
export ZOOKEEPER_PREFIX=/opt/zookeeper-3.4.14
export PATH=$PATH:$ZOOKEEPER_PREFIX/bin
export ZOO_LOG_DIR=/var/lagou/zookeeper/log
# 退出vim,讓配置生效
source /etc/profile

node2 、node3 略...
zookeeper集群部署可查看 Zookeeper詳解--(入門、原理及實戰)_程式猿二鍋頭的博客-CSDN博客

4.3 下載安裝包

中文網站: http://kafka.apachecn.org/

英文網站: http://kafka.apache.org/

4.4 上傳安裝包并解壓

使用 ftp 將安裝包上傳至 /export/software
1) 切換目錄上傳安裝包
cd /export/software

2) 解壓安裝包到指定目錄下
tar -zxvf kafka_2.11-1.0.0.tgz -C /export/servers/
cd /export/servers/

3) 重命名(由于名稱太長)
mv kafka_2.11-1.0.0 kafka

4.5 修改kafka的核心組態檔

cd /export/servers/kafka/config/
vi server.properties
主要修改一下6個地方:
    1) broker.id 需要保證每一臺kafka都有一個獨立的broker
    2) log.dirs 資料存放的目錄
    3) zookeeper.connect zookeeper的連接地址資訊
    4) delete.topic.enable 是否直接洗掉topic
    5) host.name 主機的名稱
    6) 修改: listeners=PLAINTEXT://node1:9092
#broker.id 標識了kafka集群中一個唯一broker,
broker.id=0
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
# 存放生產者生產的資料 資料一般以topic的方式存放
log.dirs=/export/data/kafka
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
# zk的資訊
zookeeper.connect=node1:2181,node2:2181,node3:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
delete.topic.enable=true
host.name=node1

4.6 將配置好的kafka分發到其他二臺主機

cd /export/servers
scp -r kafka/ node2:$PWD
scp -r kafka/ node3:$PWD

Linux scp 命令用于 Linux 之間復制檔案和目錄,

scp 是 secure copy 的縮寫, scp 是 linux 系統下基于 ssh 登陸進行安全的遠程檔案拷貝命令,

  • 拷貝后, 需要修改每一臺的broker.id 和 host.name和listeners

ip為11的服務器: broker.id=0 , host.name=node1 listeners=PLAINTEXT://node1:9092
ip為12的服務器: broker.id=1 , host.name=node2 listeners=PLAINTEXT://node2:9092
ip為13的服務器: broker.id=2 , host.name=node3 listeners=PLAINTEXT://node3:9092

  • 在每一臺的服務器執行創建資料檔案的命令

mkdir -p /export/data/kafka

4.7 啟動集群

注意事項:在kafka啟動前,一定要讓zookeeper啟動起來

cd /export/servers/kafka/bin


#前臺啟動
./kafka-server-start.sh /export/servers/kafka/config/server.properties


#后臺啟動
nohup ./kafka-server-start.sh /export/servers/kafka/config/server.properties 2>&1 &

注意:可以啟動一臺broker,單機版,也可以同時啟動三臺broker,組成一個kafka集群版
#kafka停止


./kafka-server-stop.sh

登錄zookeeper: zkCli.sh

執行: ls /brokers/ids

4.8 安裝kafka-manager (后續完善的,與前面IP有些不同,請自行更改)

鏈接:https://pan.baidu.com/s/1rX6LuEbRk6fAYxiZ107cSg
提取碼:27fh

unzip -o kafka-manager-1.3.3.7.zip

cd kafka-manager-1.3.3.7

vi conf/application.conf

修改組態檔的下面一行

kafka-manager.zkhosts="IP:2181,IP2:2181"

basicAuthentication.enabled=true

啟動kafka-manager

nohup bin/kafka-manager >/dev/null 2>&1 &

需要注意:

kafka-manager默認的埠是9000,可以在組態檔中修改

測驗訪問:http://192.168.40.171:9000/

4.9 Docker環境下的Kafka集群搭建

4.9.1 準備作業

1) 克隆VM,修改IP地址為192.168.40.150 建議記憶體2G

修改網路配置、映射、主機名 參考 4.1 準備作業

2) 安裝docker - compose

Compose 是用于定義和運行多容器 Docker 應用程式的工具,

如果我們還是使用原來的方式操作docker,那么就需要下載三個鏡像:Zookeeper、Kafka、Kafka-Manager,需要對Zookeeper安裝三次 并配置集群、需要對Kafka安裝三次,修改組態檔,Kafka-Manager安裝一次,但是需要配置埠映射機器Zooker、Kafka容器的資訊, 但是引入Compose之后可以使用yaml格式的組態檔配置好這些資訊,每個image只需要撰寫一個yaml檔案,可以在檔案中定義集群信 息、埠映射等資訊,運行該檔案即可創建完成集群,

通過 Compose,您可以使用 YML 檔案來配置應用程式需要的所有服務,然后,使用一個命令,就可以從 YML 檔案配置中創建并啟動所有 服務,

Compose 使用的兩個步驟:

  • 使用 docker-compose.yml 定義構成應用程式的服務,這樣它們可以在隔離環境中一起運行,
  • 執行 docker-compose up 命令來啟動并運行整個應用程式,

#curl 是一種命令列工具,作用是發出網路請求,然后獲取資料
curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose

#如果慢可以換一個源
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose


#chmod(change mode)命令是控制用戶對檔案的權限的命令
chmod +x /usr/local/bin/docker-compose

#查看版本
docker-compose --version

3)拉取鏡像

#拉取Zookeeper鏡像
docker pull zookeeper:3.4


#拉取kafka鏡像
docker pull wurstmeister/kafka


#拉取kafka-manager鏡像
docker pull sheepkiller/kafka-manager:latest

4) 創建集群網路

基于Linux宿主機而作業的,也是在Linux宿主機創建,創建之后Docker容器中的各個應用程式可以使用該網路,

#創建
docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 kafka

#查看
docker network ls

5)網路設定

新建網段之后可能會出現:WARNING: IPv4 forwarding is disabled. Networking will not work.
解決方式:

第一步:在宿主機上執行: echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf
第二步:重啟network和docker服務

[root@docker-master data]# systemctl restart network && systemctl restart docker

4.9.2 搭建程序

每個鏡像一個Yml檔案,Zookeeper、Kafka、Kafka-Manager一個 撰寫yml檔案

1)docker-compose-zookeeper.yml

version: '2' #指定compose 檔案的版本


services:
  zoo1:
    image: zookeeper:3.4  #使用的鏡像
    restart: always       #當Docker重啟時,該容器重啟
    hostname: zoo1        #類似于在基于Linux虛擬機Kafka集群中hostname
    container_name: zoo1
    ports:
    - 2184:2181           #埠映射
    environment:          #集群環境
      ZOO_MY_ID: 1        #當前Zookeeper實體的id
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    networks:            #使用的網路配置 
      kafka:
        ipv4_address: 192.168.0.11


  zoo2:
    image: zookeeper:3.4
    restart: always
    hostname: zoo2
    container_name: zoo2
    ports:
    - 2185:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zoo3:2888:3888
    networks:
      kafka:
        ipv4_address: 192.168.0.12


  zoo3:
    image: zookeeper:3.4
    restart: always
    hostname: zoo3
    container_name: zoo3
    ports:
    - 2186:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=0.0.0.0:2888:3888
    networks:
      kafka:
        ipv4_address: 192.168.0.13


networks:
  kafka:
    external:
      name: kafka
      
      

2)docker-compose-kafka.yml

version: '2'


services:
  kafka1:
    image: wurstmeister/kafka
    restart: always
    hostname: kafka1
    container_name: kafka1
    privileged: true
    ports:
    - 9092:9092
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka1
      KAFKA_LISTENERS: PLAINTEXT://kafka1:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
    external_links:
    - zoo1
    - zoo2
    - zoo3
    networks:
      kafka:
        ipv4_address: 192.168.0.14


  kafka2:
    image: wurstmeister/kafka
    restart: always
    hostname: kafka2
    container_name: kafka2
    privileged: true
    ports:
    - 9093:9093
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka2
      KAFKA_LISTENERS: PLAINTEXT://kafka2:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9093
      KAFKA_ADVERTISED_PORT: 9093
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
    external_links:
    - zoo1
    - zoo2
    - zoo3
    networks:
      kafka:
        ipv4_address: 192.168.0.15


  kafka3:
    image: wurstmeister/kafka
    restart: always
    hostname: kafka3
    container_name: kafka3
    privileged: true
    ports:
    - 9094:9094
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka3
      KAFKA_LISTENERS: PLAINTEXT://kafka3:9094
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9094
      KAFKA_ADVERTISED_PORT: 9094
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
    external_links:
    - zoo1
    - zoo2
    - zoo3
    networks:
      kafka:
        ipv4_address: 192.168.0.16


networks:
  kafka:
    external:
      name: kafka

3)docker-compose-manager.yml

version: '2'


services:
  kafka-manager:
    image: sheepkiller/kafka-manager:latest
    restart: always
    container_name: kafka-manager
    hostname: kafka-manager
    ports:
     - 9000:9000
    environment:
     ZK_HOSTS: zoo1:2181,zoo2:2181,zoo3:2181
     KAFKA_BROKERS: kafka1:9092,kafka2:9092,kafka3:9092
     APPLICATION_SECRET: letmein
     KM_ARGS: -Djava.net.preferIPv4Stack=true
    networks:
     kafka:
      ipv4_address: 192.168.0.17




networks:
  kafka:
    external:
      name: kafka

4)將yaml檔案上傳到Docker宿主機中

5)開始部署

使用命令:docker-compose up -d
引數說明: up表示啟動, -d表示后臺運行

引數說明: -f:表示加載指定位置的yaml檔案
docker-compose -f /home/docker-compose-zookeeper.yml up -d
docker-compose -f /home/docker-compose-kafka.yml up -d
docker-compose -f /home/docker-compose-manager.yml up -d

6)測驗

瀏覽器訪問宿主機: http://192.168.40.150:9000/

添加集群節點,測驗

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299939.html

標籤:其他

上一篇:【C語言】??函式超詳講解??(詳細講解+代碼演示+圖解)【建議收藏】

下一篇:資料挖掘01-相關性分析及可視化【Pearson, Spearman, Kendall】

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more