本地极简安装kafka

**安装方式:**macOS/Windows + Docker Desktop + Apache 官方镜像 + KRaft + SASL/PLAIN 用户密码认证的单节点开发环境

简介:为什么使用这种方式,主要就是本地极简安装,confluentinc/cp‑kafka不适合本地调试使用,更适合生产部署使用,而且本地部署也会有各种奇奇怪怪的问题,所以博主推荐的本地极简安装方式就是这种:macOS/Windows + Docker Desktop + Apache 官方镜像 + KRaft + SASL/PLAIN 用户密码认证的单节点开发环境

环境准备(主要):Mac/Windows、Docker

1、安装Docker,Mac/Windows在官网下载Docker安装即可:Docker官网
2、确认Docker Desktop 已启动
bash 复制代码
docker version
docker compose version
3、新建目录和配置文件(可自定义,后续使用的时候替换脚本中映射挂载的路径即可)

博主使用mac/windows直接创建目录也可,目前为了展示方便使用命令行

bash 复制代码
mkdir -p ~/kafka-sasl/secrets
cd ~/kafka-sasl
4、创建的目录下创建文件
  1. 创建文件:broker_jaas.conf

    复制代码
    KafkaServer {
        org.apache.kafka.common.security.plain.PlainLoginModule required
        username="admin"
        password="admin-secret"
        user_admin="admin-secret"
        user_alice="alice-secret";
    };

    这定义了两个账号:

    • admin/admin-secret:Broker 内部通信和管理员用途
    • alice/alice-secret:应用客户端账号
  2. 创建文件:client.properties

    复制代码
    security.protocol=SASL_PLAINTEXT
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="alice" password="alice-secret";
  3. 创建文件:compose.yaml

    需要注意

    • 文件中的ip:192.168.5.2是博主本人的ip,需要自行更换为localhost,或者主机ip
    • 没做kafka数据持久化,删除容器,数据会丢失,如需持久化存储,在volumes下配置持久化挂载目录即可
    yaml 复制代码
    services:
      kafka:
        image: apache/kafka:4.3.1
        container_name: kafka
        hostname: kafka
        ports:
          - "9092:9092"
    
        # 只读挂载认证文件;没有数据卷
        volumes:
          # 这块需要填写文件broker_jaas.conf所在的路径,:只处理前面部分
          - /Users/wyl/Desktop/Workspace/kafka/broker_jaas.conf:/etc/kafka/secrets/broker_jaas.conf:ro
          - /Users/wyl/Desktop/Workspace/kafka/client.properties:/etc/kafka/secrets/client.properties:ro
    			# 如需持久化存储Kafka数据,在下面再增加一条挂载路径即可
        environment:
          KAFKA_NODE_ID: "1"
          KAFKA_PROCESS_ROLES: "broker,controller"
          CLUSTER_ID: "4L6g3nShT-eMCtK--X86sw"
    
          KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER"
          KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka:29093"
    
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,BROKER:SASL_PLAINTEXT,CLIENT:SASL_PLAINTEXT"
          KAFKA_LISTENERS: "CONTROLLER://:29093,BROKER://:19092,CLIENT://:9092"
          KAFKA_ADVERTISED_LISTENERS: "BROKER://kafka:19092,CLIENT://192.168.5.2:9092"
          KAFKA_INTER_BROKER_LISTENER_NAME: "BROKER"
    
          KAFKA_SASL_ENABLED_MECHANISMS: "PLAIN"
          KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: "PLAIN"
          KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka/secrets/broker_jaas.conf"
    
          KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1"
          KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: "1"
          KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: "1"
          KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: "0"
5、启动并检查(这块可以直接Docker Desktop上查看,也可终端检查)

终端启动/检查如下

复制代码
# 终端启动
docker compose up -d
# 终端检查,查看日志
docker compose logs -f kafka
# 查看运行情况
docker ps

日志出现 Kafka 启动完成后,按 Ctrl-C 退出日志查看即可,容器仍会运行。

6、创建 Topic
复制代码
docker exec -it kafka /opt/kafka/bin/kafka-topics.sh \
  --bootstrap-server kafka:19092 \
  --command-config /etc/kafka/secrets/client.properties \
  --create \
  --topic demo \
  --partitions 1 \
  --replication-factor 1
7、测试收发消息

先开一个消费者终端

复制代码
docker exec -it kafka /opt/kafka/bin/kafka-console-consumer.sh \
  --bootstrap-server kafka:19092 \
  --consumer.config /etc/kafka/secrets/client.properties \
  --topic demo \
  --from-beginning

再开另一个终端发送(生产者)

复制代码
docker exec -it kafka /opt/kafka/bin/kafka-console-producer.sh \
  --bootstrap-server kafka:19092 \
  --producer.config /etc/kafka/secrets/client.properties \
  --topic demo

输入任意文本并回车,消费者应立即收到。

消费者窗口示例:

复制代码
Last login: Sat Aug 29 16:12:34 on ttys001
wyl@weiyilindeMacBook-Pro kafka % docker exec -it kafka /opt/kafka/bin/kafka-console-consumer.sh \
  --bootstrap-server kafka:19092 \
  --consumer.config /etc/kafka/secrets/client.properties \
  --topic demo \
  --from-beginning
Option --consumer.config is deprecated and will be removed in a future version. Use --command-config instead.
The consumer rebalance protocol (KIP-848) is production-ready! Set group.protocol=consumer to try it out. See https://kafka.apache.org/documentation/#consumer_rebalance_protocol
ret
你好
在吗?
hello kafka

生产者窗口示例:

复制代码
Last login: Sat Aug 29 17:31:01 on ttys000
wyl@weiyilindeMacBook-Pro kafka % docker exec -it kafka /opt/kafka/bin/kafka-console-producer.sh \
  --bootstrap-server kafka:19092 \
  --producer.config /etc/kafka/secrets/client.properties \
  --topic demo
Warning: --producer.config is deprecated and will be removed in a future version. Use --command-config instead.
>ret
>你好
>在吗?
>hello kafka
>
相关推荐
ZCBUS实时计算14 小时前
信创混合存储架构落地实战|基于 ZCBUS 实时计算构建证券高可用实时风控数仓
大数据·架构·flink·kafka·dba
Sayai1 天前
Kafka 去 ZooKeeper 实战评估:KRaft 模式架构解析与生产落地决策指南
zookeeper·架构·kafka
StarRocks_labs1 天前
StarRocks x Fluss x Paimon 湖流一体方案:构建秒级响应、湖流一体的实时数据引擎
starrocks·kafka·lambda·查询·paimon·fluss·湖流一体
数智启示录2 天前
实时数据湖 flink CDC + Kafka +Doris 【企业级实战】Checkpoint、Offset、事务与幂等如何闭环 06
大数据·flink·kafka
数智启示录2 天前
实时数据湖 Flink CDC + Kafka +Doris 【企业级实战】之Kafka 事件缓冲层 【附核心源码】 04
java·大数据·flink·kafka·数据库开发
数智启示录2 天前
实时数据湖 flink CDC + Kafka +Doris 【企业级实战】性能调优与生产运维闭环 09
运维·flink·kafka
树下水月2 天前
python3 使用canal监听后,kafka数据同步从mysql到clickhouse数据库 完整复盘
数据库·mysql·kafka
jj_ccwgw3 天前
Kafka 集群开机自启动配置指南
后端·kafka
JackSparrow4143 天前
Kafka(七)集成Apache Avro+Apicurio Schema Registry以保障生产者与消费者的消息兼容性
java·中间件·rpc·kafka·apache·avro·schema-registry