欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何用docker部署kafka

 更新時(shí)間:2024年09月25日 10:26:55   作者:背風(fēng)衣人  
本文詳細(xì)介紹了使用Docker快速搭建Kafka集群的步驟,包括選用wurstmeister/kafka鏡像、配置文件修改、集群?jiǎn)?dòng)與管理,適合需要在Docker環(huán)境中部署Kafka的開(kāi)發(fā)者參考

摘抄引用

Docker鏡像選型

Kafka是沒(méi)有官方Docker鏡像的,所以要么自己寫(xiě)一個(gè)Dockerfile,要么用第三方已經(jīng)構(gòu)建好的。

自己寫(xiě)一個(gè)Dockerfile不是不可以,但不符合我要“最快”的目標(biāo),所以用第三方已經(jīng)構(gòu)建好的鏡像那是最快的。

由于是第三方鏡像,希望已經(jīng)用過(guò)的人越多越好,這樣坑相對(duì)會(huì)比較少一些。

帶著上面的要求,開(kāi)始尋找合適的第三方鏡像,比較出名的有以下幾個(gè):

  1. wurstmeister/kafka特點(diǎn):star數(shù)最多,版本更新到 Kafka 1.0,zookeeper與kafka分開(kāi)于不同鏡像。
  2. spotify/kafka特點(diǎn):star數(shù)較多,有很多文章或教程推薦,zookeeper與kafka置于同一鏡像中;但kafka版本較老(還停留在0.10.1.0)。
  3. confluent/kafka背景:Confluent是書(shū)中提到的哪位開(kāi)發(fā)Kafka的Jay Kreps從LinkedLn離職后創(chuàng)立的新公司,Confluent Platform是一個(gè)流數(shù)據(jù)平臺(tái),圍繞Kafka打造了一系列的產(chǎn)品。特點(diǎn):大咖操刀,文檔詳盡,但是也和Confluent Platform進(jìn)行了捆綁。

上述三個(gè)項(xiàng)目中,最終選定使用wurstmeister/kafka,star最多,版本一直保持更新,用起來(lái)應(yīng)該比較放心。

wurstmeister/kafka鏡像簡(jiǎn)介的先決條件

  • 安裝docker-compose
  • docker-compose.yml配置文件中修改KAFKA_ADVERTISED_HOST_NAME去匹配你的docker主機(jī)IP(注意:如果你想要運(yùn)行多broker集群,不要使用localhost127.0.0.1作為主機(jī)ip)
  • 如果你想要添加自定義的Kafka參數(shù),只需要將它們添加到docker-compose.yml。例如:
    • 增加message.max.bytes參數(shù),添加KAFKA_MESSAGE_MAX_BYTES: 2000000environment部分。
    • 關(guān)閉自動(dòng)主題創(chuàng)建集,配置KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
  • Kafka可以通過(guò)添加環(huán)境變量前綴LOG4J_來(lái)自定義log4j用法。這些環(huán)境變量會(huì)映射到log4j.properties。例如:LOG4J_LOGGER_KAFKA-AUTHORIZER_LOGGER=DEBUG,authorizerAppender

**注意:**配置網(wǎng)絡(luò)有幾個(gè)“問(wèn)題”。如果你不知道的要求是什么,請(qǐng)查看連接指南

簡(jiǎn)單使用

啟動(dòng)集群:

  • docker-compose up -d

添加更多brokers

  • docker-compose scale kafka=3

銷(xiāo)毀一個(gè)集群

  • docker-compose stop

安裝過(guò)程

1. 安裝Docker(略)

2. 安裝Docker Compose(略)

3. 從github拉取最新打包資源

# 克隆docker制作腳本
git clone https://github.com/wurstmeister/kafka-docker.git

# 進(jìn)入目錄查看目錄文件
cd kafka-docker

# 查看所有標(biāo)簽,找到最新版本
git tag

# 切換到最新版本
git checkout <last_tag_name>

kafka-docker倉(cāng)庫(kù)目錄文件展示:

[root@jiewli kafka-docker]# ll
總用量 72
-rwxr-xr-x. 1 root root   210 7月   7 17:18 broker-list.sh
-rw-r--r--. 1 root root   969 7月   7 17:18 CHANGELOG.md
-rwxr-xr-x. 1 root root  1221 7月   7 17:18 create-topics.sh
-rw-r--r--. 1 root root   367 7月   7 17:08 docker-compose-single-broker.yml
-rw-r--r--. 1 root root   705 7月   7 17:08 docker-compose-swarm.yml
-rw-r--r--. 1 root root   324 7月   7 17:18 docker-compose.yml
-rw-r--r--. 1 root root  1132 7月   7 17:18 Dockerfile
-rwxr-xr-x. 1 root root   395 7月   7 17:18 download-kafka.sh
-rw-r--r--. 1 root root 11325 7月   7 17:08 LICENSE
-rw-r--r--. 1 root root  9887 7月   7 17:18 README.md
-rwxr-xr-x. 1 root root  4591 7月   7 17:18 start-kafka.sh
-rwxr-xr-x. 1 root root   131 7月   7 17:08 start-kafka-shell.sh
drwxr-xr-x. 2 root root  4096 7月   7 17:18 test

4. 更新docker-compose.yml中你docker主機(jī)ip

通過(guò)命令vim docker-compose.yml查看倉(cāng)庫(kù)目錄中的docker-compose.yml配置文件。

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    build: .
    ports:
      - "9092"
    environment:
      DOCKER_API_VERSION: 1.22
      KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

重要:

kafka 0.9.x以后的版本新增了advertised.listeners配置

kafka 0.9.x以后的版本不要使用 advertised.host.nameadvertised.host.port 已經(jīng) deprecated
 

host.nameport 為 deprecated,使用 listeners 代替

所以,KAFKA_ADVERTISED_HOST_NAME配置也要改成 KAFKA_ADVERTISED_LISTENERS, 而后者要求必須配置 KAFKA_LISTENERS,不然會(huì)拋異常:

ERROR: Missing environment variable KAFKA_LISTENERS. Must be specified when using KAFKA_ADVERTISED_LISTENERS

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    build: .
    ports:
      - "9092"
    environment:
      DOCKER_API_VERSION: 1.22
      KAFKA_LISTENERS: PLAINTEXT://:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.99.100:9094
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

將上面KAFKA_ADVERTISED_HOST_NAME改為你的docker主機(jī)ip。

如果你想要添加自定義的Kafka參數(shù),只需要將它們添加到docker-compose.yml。例如:

  • 增加message.max.bytes參數(shù),添加KAFKA_MESSAGE_MAX_BYTES: 2000000environment部分。
  • 關(guān)閉自動(dòng)主題創(chuàng)建集,配置KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'

啟動(dòng)失?。?/p>

[root@jiewli kafka-docker]# docker logs -f --tail=300 kafka-docker_kafka_1
ERROR: Missing environment variable KAFKA_LISTENERS. Must be specified when using KAFKA_ADVERTISED_LISTENERS
ERROR: Missing environment variable KAFKA_LISTENERS. Must be specified when using KAFKA_ADVERTISED_LISTENERS
ERROR: Missing environment variable KAFKA_LISTENERS. Must be specified when using KAFKA_ADVERTISED_LISTENERS
ERROR: Missing environment variable KAFKA_LISTENERS. Must be specified when using KAFKA_ADVERTISED_LISTENERS
ERROR: Missing environment variable KAFKA_LISTENERS. Must be specified when using KAFKA_ADVERTISED_LISTENERS
ERROR: Missing environment variable KAFKA_LISTENERS. Must be specified when using KAFKA_ADVERTISED_LISTENERS
ERROR: Missing environment variable KAFKA_LISTENERS. Must be specified when using KAFKA_ADVERTISED_LISTENERS
ERROR: Missing environment variable KAFKA_LISTENERS. Must be specified when using KAFKA_ADVERTISED_LISTENERS
ERROR: Missing environment variable KAFKA_LISTENERS. Must be specified when using KAFKA_ADVERTISED_LISTENERS

5. 啟動(dòng)集群

$ docker-compose up -d

例如,啟動(dòng)一個(gè)有兩個(gè)broker的的集群

$ docker-compose scale kafka=2

這會(huì)啟動(dòng)一個(gè)單獨(dú)的zookeeper實(shí)例,和兩個(gè)Kafka實(shí)例。你可以使用docker-compose ps命令去顯示正在運(yùn)行的實(shí)例。

如果你想去添加更多的Kafka brokers,只需要通過(guò)命令docker-compose scale kafka=n增加值。

5.1 當(dāng)執(zhí)行docker-compose -f docker-compose.yml up -d命令遇到錯(cuò)誤

wget: server returned error: HTTP/1.1 404 Not Found
The command '/bin/sh -c apk add --no-cache bash curl jq docker  && mkdir /opt  && chmod a+x /tmp/*.sh  && mv /tmp/start-kafka.sh /tmp/broker-list.sh /tmp/create-topics.sh /usr/bin  && sync && /tmp/download-kafka.sh  && tar xfz /tmp/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz -C /opt  && rm /tmp/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz  && ln -s /opt/kafka_${SCALA_VERSION}-${KAFKA_VERSION} /opt/kafka  && rm /tmp/*  && wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk  && apk add --no-cache --allow-untrusted glibc-${GLIBC_VERSION}.apk  && rm glibc-${GLIBC_VERSION}.apk' returned a non-zero code: 1
ERROR: Service 'kafka' failed to build

根據(jù)提示,是wget命令下載某個(gè)文件的時(shí)候遇到了404。

5.2 分析腳本執(zhí)行過(guò)程

DockerfileRUN指令中可以找到:

經(jīng)過(guò)一番排查,最終定位到download-kafka.sh這個(gè)腳本中的wget命令,我增加一行echo命令,將整個(gè)wget命令打印出來(lái)看看:

# echo打印結(jié)果
wget -q "https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/1.1.0/kafka_2.12-1.1.0.tgz" -O "/tmp/kafka_2.12-1.1.0.tgz"

根據(jù)鏈接查找這個(gè)文件,發(fā)現(xiàn)是在“清華大學(xué)開(kāi)源軟件鏡像站”中下載的,但是1.1.0這個(gè)目錄都沒(méi)有了,取而代之的是2.x.x的目錄了。

下載不了,很明顯這個(gè)版本太落后了。一看倉(cāng)庫(kù)git-tag的創(chuàng)建時(shí)間居然是2018年,已經(jīng)三年多沒(méi)有發(fā)布新的tag版本了。

5.3 使用master分支的構(gòu)建腳本啟動(dòng)2.x.x版本的kafka

那么回到master分支看看,一看最新提交,2021年6月有提交過(guò)。仔細(xì)研究了一下master分支的腳本和Dockerfile,其實(shí)作者早已經(jīng)將kafka版本調(diào)整到2.x.x,并且修改了下載地址。

那么切換到master分支后,重新使用命令$ docker-compose up -d啟動(dòng)kafka集群就可以了。

6. 開(kāi)啟單個(gè)節(jié)點(diǎn)

docker-compose -f docker-compose-single-broker.yml up -d

開(kāi)啟容器如下所示:

[root@jiewli ~]# docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED         STATUS       PORTS                                                NAMES
43fb3efd832f   kafka-docker_kafka          "start-kafka.sh"         24 hours ago    Up 4 hours   0.0.0.0:9092->9092/tcp                               kafka-docker_kafka_1
b8bc06090259   wurstmeister/zookeeper      "/bin/sh -c '/usr/sb…"   24 hours ago    Up 4 hours   22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp   kafka-docker_zookeeper_1

Kafka Shell

進(jìn)入docker容器交互命令行

docker exec -it kafka-docker_kafka_1 /bin/bash

查看 kafka 安裝目錄,找到腳本位置

bash-5.1# echo $KAFKA_HOME
/opt/kafka
bash-5.1# cd $KAFKA_HOME
bash-5.1# ls
LICENSE    NOTICE     bin        config     libs       licenses   logs       site-docs

默認(rèn)情況下,kafka 安裝目錄是 /opt/kafka

你可以通過(guò)Kafka Shell與你的Kafka集群進(jìn)行交互。

$ $KAFKA_HOME/bin/start-kafka-shell.sh <DOCKER_HOST_IP> <ZK_HOST:ZK_PORT>

測(cè)試

測(cè)試你的安裝步驟。

啟動(dòng)一個(gè)shell終端,創(chuàng)建一個(gè)topic和啟動(dòng)一個(gè)生產(chǎn)者。

$ $KAFKA_HOME/bin/kafka-topics.sh --create --topic topic \
--partitions 4 --zookeeper $ZK --replication-factor 2

$ $KAFKA_HOME/bin/kafka-topics.sh --describe --topic topic --zookeeper $ZK

$ $KAFKA_HOME/bin/kafka-console-producer.sh --topic=topic \
--broker-list=`broker-list.sh`

啟動(dòng)另一個(gè)shell終端,并啟動(dòng)一個(gè)消費(fèi)者。

$ $KAFKA_HOME/bin/kafka-console-consumer.sh --topic=topic --zookeeper=$ZK

在MAC電腦上運(yùn)行Kafka-docker

安裝Docker Toolbox,并將docker-machine ip命令返回的ip配置到KAFKA_ADVERTISED_HOST_NAME

故障排除

  • 默認(rèn)情況下,Kafka broker使用1GB內(nèi)存,因此如果您在啟動(dòng)代理是遇到問(wèn)題,請(qǐng)檢查docker-compose logs/docker logs查找容器并確保主機(jī)上有足夠的可用內(nèi)存。
  • 如果要運(yùn)行多個(gè)broker,請(qǐng)不要使用localhost127.0.0.1作為主機(jī)IP,否則broker將無(wú)法通信。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Docker部署Spring Boot項(xiàng)目的實(shí)現(xiàn)步驟

    使用Docker部署Spring Boot項(xiàng)目的實(shí)現(xiàn)步驟

    本文主要介紹了使用Docker部署Spring Boot項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Docker容器安裝Vim編輯器的方法

    Docker容器安裝Vim編輯器的方法

    Docker容器是一種輕量級(jí)、可移植的應(yīng)用程序打包解決方案,在本文中,我們將討論如何在Docker容器中安裝Vim編輯器,為容器增添一個(gè)功能強(qiáng)大的文本編輯器,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • 安裝Docker配置阿里云鏡像加速(圖文教程)

    安裝Docker配置阿里云鏡像加速(圖文教程)

    dcker配置阿里云鏡像加速,其目的是為了在提高docker鏡像下載速度,本文主要介紹了安裝Docker配置阿里云鏡像加速,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-04-04
  • 如何將Docker的構(gòu)建時(shí)間減少40%(推薦)

    如何將Docker的構(gòu)建時(shí)間減少40%(推薦)

    這篇文章主要介紹了如何將Docker的構(gòu)建時(shí)間減少40%,本文描述了我們?cè)趦?yōu)化CI管道后獲得的一些新見(jiàn)解,需要的朋友可以參考下
    2023-11-11
  • CentOS7 禁用Transparent Huge Pages的實(shí)現(xiàn)方法

    CentOS7 禁用Transparent Huge Pages的實(shí)現(xiàn)方法

    這篇文章主要介紹了 CentOS7 禁用Transparent Huge Pages的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • docker 啟動(dòng)具有多個(gè)網(wǎng)絡(luò)接口的容器的方法示例

    docker 啟動(dòng)具有多個(gè)網(wǎng)絡(luò)接口的容器的方法示例

    這篇文章主要介紹了docker 啟動(dòng)具有多個(gè)網(wǎng)絡(luò)接口的容器的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • MySQL docker容器數(shù)據(jù)更新統(tǒng)計(jì)shell腳本代碼方式

    MySQL docker容器數(shù)據(jù)更新統(tǒng)計(jì)shell腳本代碼方式

    本文介紹了如何創(chuàng)建和配置一個(gè)腳本文件,使其能夠每隔一小時(shí)執(zhí)行一次,用于更新MySQL統(tǒng)計(jì)信息,腳本使用Docker來(lái)執(zhí)行MySQL命令,并將結(jié)果保存到文件中,文章還強(qiáng)調(diào)了權(quán)限設(shè)置和配置定時(shí)任務(wù)的步驟
    2025-01-01
  • 基于安裝docker desktop失敗的解決方案

    基于安裝docker desktop失敗的解決方案

    這篇文章主要介紹了基于安裝docker desktop失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • docker對(duì)網(wǎng)絡(luò)和程序速度的影響解讀

    docker對(duì)網(wǎng)絡(luò)和程序速度的影響解讀

    本文通過(guò)對(duì)比分析,測(cè)試了在宿主機(jī)和Docker容器中部署Spring Boot程序的性能差異,在網(wǎng)絡(luò)延遲方面,Docker容器比宿主機(jī)慢0.1~0.2毫秒,在程序運(yùn)行速度方面,宿主機(jī)和Docker容器的平均運(yùn)行時(shí)間相近,單次運(yùn)行時(shí)間存在較大差異,無(wú)法確定Docker容器在速度上優(yōu)于宿主機(jī)
    2025-01-01
  • linux和docker下mysql安裝方式

    linux和docker下mysql安裝方式

    本文詳細(xì)介紹了在Linux系統(tǒng)中通過(guò)命令行安裝MySQL的步驟,包括編輯yum源、下載并啟動(dòng)MySQL服務(wù)、登錄和修改密碼等操作,同時(shí),文中也提供了在Docker環(huán)境下安裝MySQL的流程,涵蓋了拉取MySQL鏡像、查看運(yùn)行狀態(tài)及登錄MySQL的方法
    2024-09-09

最新評(píng)論