docker-compose-kafka 4.1.0

文章目录

环境

虚拟机环境 CentOS7.8

单节点部署

kafka 4.1 配置

官方配置说明

https://github.com/apache/kafka/blob/trunk/docker/examples/docker-compose-files/single-node/plaintext/docker-compose.yml

!info

需要注意的是选择的时候需要选择特定的版本~

初始化目录

shell 复制代码
# 创建数据目录
mkdir data
# 设置权限
chmod 777 data

docker-compose.yml

yml 复制代码
services:
  kafka:
    container_name: kafka-v410
    image: apache/kafka:4.1.0
    ports:
      - "9092:9092" 
    volumes:
      - ./data:/var/lib/kafka/data   # 数据目录
    environment:
      # 这里可以自行随机一个
      CLUSTER_ID: "4L6g3nShT-eMCtK--X86sw"
      # 当前 Kafka 节点的唯一 ID(在集群中必须唯一)
      KAFKA_NODE_ID: 1
      # 当前节点同时承担 broker(处理生产/消费请求)和 controller(管理集群元数据)角色
      KAFKA_PROCESS_ROLES: "broker,controller"
      # 只保留两个监听器:一个给客户端,一个给 controller
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
      # 指定了外部可访问的地址和内部通信地址。
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.117.132:9092
      # 定义了不同监听器的安全协议
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
      # 指定哪些监听器名称用于 controller 通信(必须与 KAFKA_LISTENERS 中的名称一致)
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      # 指定 broker 之间通信使用的监听器名称(必须与 advertised.listeners 中的名称一致)
      # 此处使用 PLAINTEXT(对应 broker:19092),用于副本同步、leader 选举等内部流量
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      # 因为是单节点,且在容器内,用 "kafka"(服务名)或 "localhost" 都可以
      # 但必须与 LISTENERS 中 CONTROLLER 的 host 一致 → 这里监听 0.0.0.0,所以用 kafka(Docker DNS)
      KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka:9093"
      # 内部 __consumer_offsets 主题的副本数(单节点开发环境设为 1,避免 ISR 不足)
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      # 事务状态日志主题(__transaction_state)所需的最小同步副本数(ISR)
      # 单节点必须设为 1,否则无法写入事务
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      # 消费者组初次加入时延迟触发再平衡的时间(毫秒),设为 0 可加快测试时的组协调速度
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      # Kafka 4.1+ 新增的共享状态协调器主题(用于 Share Groups)的副本数(单节点设为 1)
      KAFKA_SHARE_COORDINATOR_STATE_TOPIC_REPLICATION_FACTOR: 1
      # 共享状态协调器主题的最小 ISR(单节点设为 1)
      KAFKA_SHARE_COORDINATOR_STATE_TOPIC_MIN_ISR: 1
      # 数据目录
      KAFKA_LOG_DIRS: /var/lib/kafka/data

启动

shell 复制代码
docker-compose up -d

运行记录

日志查看

shell 复制代码
 docker logs -f [容器ID]

测试

发送消息

java 复制代码
    @GetMapping("/testSend")
    public String index() throws Exception {
        for (int i = 0; i < 100; i++) {
            kafkaTemplate.send("topic_test", "message:" + i);
        }
        return "ok";
    }

接受消息

java 复制代码
@Slf4j
@Component
public class KafkaConsumer {

    /**
     * 通用
     */
    @KafkaListener(topics = "${kafka.topic-test}", concurrency = "8")
    public void upstreamTopicHandler(List<String> messages) {
        log.info(" string 批量消费到 {} 条数据", messages.size());
        messages.clear();
    }

}

配置文件

yml 复制代码
spring:
  threads:
    virtual:
      enabled: true
  kafka:
    bootstrap-servers: 192.168.117.132:9092
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer:
      group-id: store_gr_00
      auto-offset-reset: latest
      client-id: store_gr_00
      max-poll-records: 1000
    listener:
      concurrency: 10
相关推荐
weixin_436525075 分钟前
使用 idea 命令行构建 Docker 镜像并部署到云服务器
linux·docker·github
h***01542 小时前
Docker启动安装nacos(详情讲解,全网最细)
运维·docker·容器
人工智能训练3 小时前
windows系统中的docker,xinference直接运行在容器目录和持载在宿主机目录中的区别
linux·服务器·人工智能·windows·ubuntu·docker·容器
阿拉斯攀登3 小时前
docker介绍
服务器·docker
谷隐凡二3 小时前
docker的简单介绍
docker·容器·eureka
wljt4 小时前
Docker常用命令
运维·docker·容器
2501_941142134 小时前
基于 Kotlin 构建移动端高并发后台服务与实时数据同步系统的架构设计与工程实践分享
kafka
百***48075 小时前
从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)
docker·容器·node.js
敲上瘾6 小时前
Docker镜像构建优化指南:CMD/ENTRYPOINT、多阶段构建与缓存优化
运维·缓存·docker·容器·架构
❀͜͡傀儡师9 小时前
docker安装mac系统
macos·docker·容器