kafka docker server端服务器运行

想要运行kafka。发现windows系统运行kafka经常报问题怎么办?linux系统环境太复杂怎么办

本文针对kafka服务器的启动,介绍如何利用docker在容器内运行kakfa的server。

1. 环境说明

docker提供了相对独立简洁的运行环境,能够让kafka的服务端良好独立地运行,遇到问题也方便进行排查。

经常使用的kafka镜像有wurminster/kafka, bitnami/kafka这两种,都可以使用。本文使用bitnami/kafka,并结合zookeeper使用(kafka的运行基础)。

docker: 24.0.6

镜像bitnami/kafka: 2.8.1

镜像bitnami/zookeeper: latest

镜像dushixiang/kafka-map:latest(kafka的管理界面,可同时启动使用)

不同版本基本不会对运行产生影响。

2. 方法介绍

为了让kafka有健全的运行体系,并且方便我们一键式地开启或关闭kafka的server,利用docker compose工具来建立一个由多容器构成的整体服务。

2.1. 文件准备

创建一个kafka文件夹,文件夹中创建2个文本文件,重命名为.envcompose.yaml

2.1.1. .env文件

.env文件的作用为设置环境变量,方便我们修改相关的参数,如端口、版本等。

ZOOKEEPER_IMAGE_VERSION='latest'
KAFKA_IMAGE_VERSION='2.8.1'
KAFKA_MAP_IMAGE_VERSION='latest'
ZOOKEEPER_PORT=2181
KAFKA_PORT=9092
KAFKA_MAP_PORT=9001

2.1.2. compose.yaml文件

docker compose进行启动服务的执行文件,根据文件内容运行对应镜像。

将生成zookeeper,kafka,kafka-map三个容器。

services:
  zookeeper:
    image: bitnami/zookeeper:${ZOOKEEPER_IMAGE_VERSION}
    container_name: zookeeper
    ports:
      - ${ZOOKEEPER_PORT}:2181
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
    networks:
      - app-tier

  kafka:
    image: bitnami/kafka:${KAFKA_IMAGE_VERSION}
    container_name: kafka
    ports:
      - ${KAFKA_PORT}:9092
    environment:
      - KAFKA_CFG_NODE_ID=1
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      # - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092  不用advertised会导致client无法连接
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:${KAFKA_PORT}
    networks:
      - app-tier

  kafka-map:
    image: dushixiang/kafka-map:${KAFKA_MAP_IMAGE_VERSION}
    container_name: kafka-map
    restart: always
    ports:
      - ${KAFKA_MAP_PORT}:8080
    environment:
      - DEFAULT_USERNAME=admin
      - DEFAULT_PASSWORD=admin
    volumes:
      - /opt/kafka-map/data/:/usr/local/kafka-map/data
    networks:
      - app-tier

networks:
  app-tier:

2.2. 运行命令

打开cmd并cd到kafka文件夹的路径

输入下方命令

docker compose up -d

 成功运行将显示

此时即说明kafka的server已运行成功。

3. 后续操作

3.1. 运行client客户端(consumer和producer)

我的本机是windows,可以通过在windows安装kafka来生成producer和consumer。

也可以利用python代码,来生成producer和consumer。

client客户端的运行将依赖于docker生成的kafka server端,如果server停止运行,client会出问题。

3.1.1. 通过windows安装的kafka运行

首先在cmd中cd到kafka的执行路径。

cd "G:\kafka_2.13-2.8.1\bin\windows"

利用以下代码产生consumer或producer,注意一个窗口只能开一个,两个都开要两个窗口。

# 启动consumer
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
# 启动producer
kafka-console-producer.bat --broker-list localhost:9092 --topic test

3.1.2. python代码生成

首先python环境中需安装kafka-python

producer: 每秒钟由producer发送时间

from kafka import KafkaProducer
import time


if __name__ == "__main__":
    producer = KafkaProducer(bootstrap_servers='localhost:9092',
                             api_version=(2, 8, 1))
    print('Producer is ready to send messages')
    while True:
        time.sleep(1)
        msg = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
        print(msg)
        msg = msg.encode('utf-8')
        producer.send(topic='python', value=msg)

consumer

from kafka import KafkaConsumer
import os


if __name__ == "__main__":
    consumer = KafkaConsumer('python',
                            bootstrap_servers=['localhost:9092'],
                            group_id = str(os.getpid()),
                            api_version=(2, 8, 1),
                            auto_commit_interval_ms=5000,
                            )

    for msg in consumer:
        value = msg.value.decode('utf-8')
        recv = "%s:%d:%d: key=%s value=%s" % (msg.topic, msg.partition, msg.offset, msg.key, value)
        print(recv)

3.2. kafka相关信息查看

这里以通过zookeeper查看当前已有的broker(即kafka的server端)为例。

在cmd中运行

docker exec -it zookeeper bin/bash zkCli.sh

进入该容器后,运行

# 查看当前已有的broker的id
ls /brokers/ids
# 输出: [1, 2, 3]
# 获取该broker的信息
get /brokers/ids/<某id>

参考资料

Docker安装Kafka教程(超详细)

kafka各种环境安装(window,linux,docker,k8s),包含KRaft模式

解决Docker容器连接 Kafka 连接失败问题

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Kafka Docker 是将 Apache Kafka 消息队列系统与 Docker 容器化的方式。使用 Kafka Docker 可以方便地部署和管理 Kafka 集群。 要在 Docker运行 Kafka,首先需要安装 Docker 并确保 Docker 服务正在运行。然后,可以通过以下步骤来部署 Kafka 集群: 1. 下载 Kafka 镜像:可以从 Docker Hub 上获取 Kafka 官方镜像,命令如下: ``` docker pull confluentinc/cp-kafka ``` 2. 创建一个网络:创建一个 Docker 网络以供 Kafka 和 ZooKeeper 使用,命令如下: ``` docker network create kafka-network ``` 3. 启动 ZooKeeper:ZooKeeper 是 Kafka 的依赖项之一,需要先启动 ZooKeeper 服务,命令如下: ``` docker run -d --name=zookeeper --network=kafka-network -e ZOOKEEPER_CLIENT_PORT=2181 confluentinc/cp-zookeeper ``` 4. 启动 Kafka:启动 Kafka 服务,并将其连接到先前创建的网络,命令如下: ``` docker run -d --name=kafka --network=kafka-network -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 confluentinc/cp-kafka ``` 现在,你已经成功在 Docker 中部署了一个简单的 Kafka 集群。你可以使用 Kafka 的客户工具来与集群进行交互,例如创建主题、发送和接收消息等操作。 请注意,上述命令是一个基本示例,你可以根据自己的需求进行调整和扩展。另外,在生产环境中部署 Kafka 集群时,还需要考虑更多的配置和调优。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值