从现在开始学 Kafka:Docker 部署 Kafka 单机版

前言

刚开始学习 Kafka,在什么都不会一脸懵逼的情况下,我选择通过部署单机版的方式,对 Kafka 有个初步认识,同时也会整理相关知识点信息,单独开个文章。

本文服务器目录统一放在 /data/kafka 目录下

官方文档

Kafka 中文文档

关于镜像

镜像选择的是 wurstmeister/kafka-docker 算是最火的 Kafka 镜像了
Github 地址
Dockerhub 地址

安装 docker-componse

由于安装方式使用的是 docker-componse,所以要先安装
CentOS 之 docker-compose 安装

官方安装教程

使用 docker-componse 安装一个是因为 wurstmeister/kafka-docker 给出的教程是这种方式,另一个原因确实是这种方式能减少不少命令,最后配置写好后统一启动就行了

部署

编写启动脚本

docker-compose-single-broker.yml

  • image: 使用的启动镜像
  • port: 服务器与容器映射端口
  • environment: 设置参数

官方参数参考

PS:kafka 需要依赖 zookeeper 环境,因此需要配置 zookeeper 镜像,没镜像会自动拉取

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      # client 要访问的 broker 地址
      KAFKA_ADVERTISED_HOST_NAME: 118.25.215.105
      # 通过端口连接 zookeeper
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      # 每个容器就是一个 broker,设置其对应的 ID
      KAFKA_BROKER_ID: 0
      # 外部网络只能获取到容器名称,在内外网络隔离情况下
      # 通过名称是无法成功访问 kafka 的
      # 因此需要通过绑定这个监听器能够让外部获取到的是 IP 
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://118.25.215.105:9092
      # kafka 监听器,告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      # Kafka默认使用-Xmx1G -Xms1G的JVM内存配置,由于服务器小,调整下启动配置
      # 这个看自己的现状做调整,如果资源充足,可以不用配置这个
      KAFKA_HEAP_OPTS: "-Xmx256M -Xms128M"
      # 设置 kafka 日志位置
      KAFKA_LOG_DIRS: "/kafka/logs"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      # 挂载 kafka 日志
      - /data/kafka/logs:/kafka/logs

启动 Kafka

  • -f: 使用指定的配置文件
  • up: 创建
docker-compose -f /data/kafka/docker-compose-single-broker.yml up

启动成功的话,单机版就已经部署完成
在这里插入图片描述
在这里插入图片描述

命令

查看脚本

先来看下 Kafka 下面有哪些脚本,因为我们需要依赖脚本来执行命令

直接根据容器名对容器内执行命令

PS:以后我们也可以根据脚本,去百度对应的命令

docker exec -it kafka_kafka_1 /bin/bash -c 'cd /opt/kafka/bin && ls'

在这里插入图片描述

创建 Topic

Topic 就是类别,分组,但我更喜欢叫主题。

生产者向某个 Topic 生产数据,消费者去对应消费 Topic 的数据

  • –partitions 1: 分区数量 1
  • –replication-factor 1: 副本因子数量 1

分区的数量一般不多于服务器,副本因子也一样

分区: 分区的作用能起到一个负载均衡提高吞吐量的作用。假如有3个台服务器,一共3个分区,那么每个服务器就对应 1 个分区,每台服务器吞吐量 100,那么一共就能处理 300 吞吐量。但是分区过多也不好,因为越多的分区需要打开更多地文件句柄,更多的内存,更高的延迟,运维与排错方面的成本也会增加。
参考:如何为Kafka集群选择合适的Partitions数量

副本因子: 由于如果服务器宕机,就会导致分区数量缺少,导致集群的不可用,因此会用副本因子来保证分区数量。
参考:Kafka动态调整topic副本因子replication-factor

docker exec -it kafka_kafka_1 /bin/bash -c \
'/opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 \
--replication-factor 1 --partitions 1 --topic test'

在这里插入图片描述

查看 Topic

docker exec -it kafka_kafka_1 /bin/bash -c \
'/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092'

可以看到刚创建的 test 主题
在这里插入图片描述

生产者生产数据

现在模拟生产者向主题中设置数据

docker exec -it kafka_kafka_1 /bin/bash -c \
'/opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test'

PS:Ctrl + D 退出
在这里插入图片描述

消费者消费数据

模拟消费者从开始位置消费数据

docker exec -it kafka_kafka_1 /bin/bash -c \
'/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 \
--from-beginning --topic test'

在这里插入图片描述

结语

说实话,上述的命令行虽然使用上都很正常,但是还是有点懵,只能说具体的搭建完成了,下面要想正确学习还是需要结合代码。

原创文章 120 获赞 457 访问量 16万+

猜你喜欢

转载自blog.csdn.net/qq_37143673/article/details/105832634