• 【Kafka】Docker安装kafka、搭建kafka集群


    kafka官方文档https://kafka.apache.org/documentation/#quickstart
    我们都知道kafka3.0之前依赖于zookeeper(zk)管理其中的元数据,因此在安装kafka之前先安装zk。

    docker pull wurstmeister/zookeeper 
    
    • 1

    启动zk服务:

    docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2  --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper
    
    • 1

    安装kafka:目前kafka的docker镜像主要是两个版本:wurstmeister/kafkabitnami/kafka ,本次选用的是后者。

    # bitnami/kafka
    docker pull bitnami/kafka:latest
    # wurstmeister/kafka
    docker pull wurstmeister/kafka
    
    • 1
    • 2
    • 3
    • 4

    启动kafka服务:

    sudo docker run -d  --privileged=true \
    --name kafka0 -p 9092:9092 \
    -e KAFKA_BROKER_ID=0 \
    -e KAFKA_ZOOKEEPER_CONNECT=IP:2181 \
    -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
    -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://IP:9092 \
    -e ALLOW_PLAINTEXT_LISTENER=yes \
    bitnami/kafka:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    参数解释:

    -d :后台运行
    –privileged:使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
    -p:暴露端口,-p 9092:9092 将容器内部的9092端口映射到宿主机的端口上。
    – name 当前容器的名字。
    KAFKA_BROKER_ID : broker的ID,这个ID是集群的标识,不能重复。
    KAFKA_ZOOKEEPER_CONNECT:zookeeper的连接地址
    KAFKA_LISTENERS:标识kafka服务运行在容器内的9092端口,因为没有指定host,所以是0.0.0.0标识所有的网络接口。
    KAFKA_ADVERTISED_LISTENERS:kafka发布到zookeeper供客户端使用的服务地址。
    ALLOW_PLAINTEXT_LISTENER :允许使用PLAINTEXT侦听器。

    如果需要进行目录挂载,则使用下面的命令(注意一个服务只能挂载一个目录)

    -v /usr/kafka/data:/bitnami/kafka/data 
    -v /usr/kafka/config:/bitnami/kafka/config 
    # /usr/kafka/data是宿主机的目录,/bitnami/kafka/data  是容器内的目录,data做数据映射,config做配置文件映射
    
    • 1
    • 2
    • 3

    按照上面的命令,我们只需要修改nameportbrokerid就能搭建多个kafka服务,为了简单,zookeeper这里就只搭建了一台,而kafka搭建了三台,最终的集群规模如下:

    nameportbrokerid
    kafka090920
    kafka190931
    kafka290942

    搭建完成后我们可以使用docker ps命令查看服务是否真的启动了:

    sudo docker ps
    
    • 1

    如果你的服务启动异常,docker ps不能查看到,这时候就需要我们进行问题排查了,可以查看docker容器日志:

    命令格式:docker logs [OPTIONS] CONTAINER
    OPTIONS说明:
    -f : 跟踪日志输出
    --since :显示某个开始时间的所有日志
    -t : 显示时间戳
    --tail :仅列出最新N条容器日志
    如:docker logs --since="2022-09-01" --tail=10 kafka0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    启动完成之后,我们可以进入容器中使用命令验证
    进入容器命令:

    docker exec -it kafka /bin/bash
    
    • 1

    kafka的各个脚本都在:/opt/bitnami/kafka/bin下面,如kafka-topics.shkafka-console-consumer.sh
    创建主题(可指定分区数、副本数…):

    /opt/bitnami/kafka/bin/kafka-topics.sh --create --topic test-kafka0 --replication-factor 3 --partitions 3 --bootstrap-server IP:9092
    # 参数解释
    --create 表示创建
    --topic 指定主题名称
    --replication-factor 指定副本数
    partitions 指定分区数
    --bootstrap-server 连接kafka服务器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查看主题的描述信息(分区、副本、Leader…):

    /opt/bitnami/kafka/bin/kafka-topics.sh --describe --topic test-kafka0 --bootstrap-server IP:9092
    # 参数解释
    --describe 表示查看描述信息
    
    • 1
    • 2
    • 3

    生产者生产消息:

    /opt/bitnami/kafka/bin/kafka-console-producer.sh --topic test-kafka0 --bootstrap-server IP:9092
    
    • 1

    另外进入一个容器,如进入kafka1中进行消费:

    /opt/bitnami/kafka/bin/kafka-console-consumer.sh --topic test-kafka0 --from-beginning --bootstrap-server IP:9092
    
    • 1

    其中,--from-beginning表示会消费历史消息,如果不配置,只能消费消费者节点上线之后生产者发送的消息。

  • 相关阅读:
    java网络编程-双机通信
    Dynamic Wallpaper v17.4 mac版 动态视频壁纸 兼容 M1/M2
    【11.2】【VP】Codeforces Round #727 (Div. 2)
    java计算机毕业设计ssm人事考勤管理系统1u133(附源码、数据库)
    网红和主播们是用的什么美颜工具?深入剖析美颜sdk与美颜Api
    点大商城V2_2.5.0 全开源独立版 商家自营+多商户入驻 百度+支付宝+QQ+头条+小程序端+unipp开源前端
    Print()函数用法实例详解
    出口英国玩具有带电的话检测标准是 BS EN62115
    Zookeeper简介、原理和功能?
    com.google.gson.internal.LinkedTreeMap cannot be cast to XXX
  • 原文地址:https://blog.csdn.net/dl962454/article/details/126655729