1. 前言

昨天20210917涉及到kafka相关的业务,虽然直接连接别人搭建好的环境就行,但是本着学习与分享,自己在本地也部署了下,就顺便写个docker的文档吧。

Kafka是一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。
本地搭建有多种方式直接在window配置环境搭建,这种需要安装很多环境(jdk、gradle、scale、zookeeper、kafka), 虚拟机上搭建,还有就是最简洁高效方便的docker.

2. 安装运行

2.1. 下载镜像

分别将zookeeper和kafka两个镜像下载下来

docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka

2.2. 启动容器

  • 启动zookeeper
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
  • 启动kafka
docker run -d --name kafka --publish 9092:9092 \
--link zookeeper \
--env KAFKA_ZOOKEEPER_CONNECT=192.168.31.64:2181 \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.31.64 \
--env KAFKA_ADVERTISED_PORT=9092  \
--env KAFKA_LOG_DIRS=/kafka/logs-1 \
wurstmeister/kafka

192.168.31.64为你宿主机器实际的IP,你可以理解为你window本机的IP,命令行下输入ipconfig可查看到,window下运行不了,把 \ 去掉不换行

3. 执行命令

3.1. 创建topic

  • 创建名为test的topic,包含一个分区和一个 Replica
docker exec kafka kafka-topics.sh --create --zookeeper 192.168.31.64:2181 --replication-factor 1 --partitions 1 --topic test
  • 查看是否成功,可列出kafka下的topic
docker exec kafka kafka-topics.sh --list --zookeeper 192.168.31.64:2181

3.2. 创建消息

如上一步没有创建topic,执行下面内容也会自动创建topic

  • 发送消息

执行后可以输入一些数据

docker exec -it kafka kafka-console-producer.sh --broker-list 192.168.31.64:9092 --topic test
  • 接受消息
docker exec -it kafka kafka-console-consumer.sh --bootstrap-server 192.168.31.64:9092 --topic test

执行上面可看到之前输入的消息不在,如果要获取之前的消息,需要使用下面的语句:

docker exec -it kafka kafka-console-consumer.sh --bootstrap-server 192.168.31.64:9092 --topic test --from-beginning

3.3. 容器里执行

以上命令也可以到kafka的容器里执行,/opt/kafka/bin目录下执行 .sh文件,效果是一样。

docker exec -it kafka /bin/bash
kafka容器

cd /opt/kafka/bin
kafka-topics.sh --create --zookeeper 192.168.31.64:2181 --replication-factor 1 --partitions 1 --topic test
kafka-topics.sh --list --zookeeper 192.168.31.64:2181
kafka-console-producer.sh --broker-list 192.168.31.64:9092 --topic test
kafka-console-consumer.sh --bootstrap-server 192.168.31.64:9092 --topic test --from-beginning

以上环境就搭建好了,本地代码调用就用192.168.31.64:9092,如:kafka消息队列的写入个性化广告数据

4. Docker Compose启动容器

上面的安装运行步骤麻烦,可以直接通过通过 Docker Compose 进行启动,一句简单的启动语句就搞定。

docker-compose up -d

docker-compose.yml 文件内容如下:

version: '3'

services:
  zookeeper:
    image: wurstmeister/zookeeper
    restart: unless-stopped
    hostname: zookeeper
    ports:
      - "2181:2181"
    container_name: zookeeper

  # kafka version: 1.1.0
  # scala version: 2.12
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.31.64
      KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"
      KAFKA_BROKER_ID: 1
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_CREATE_TOPICS: "stream-in:1:1,stream-out:1:1" 
      KAFKA_LOG_DIRS: "/kafka/logs"
    depends_on:
      - zookeeper
    container_name: kafka
Copyright © yzx该文章修订时间: 2021-09-18 14:18:00

results matching ""

    No results matching ""