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
相关推荐
功德+n7 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
小敬爱吃饭7 小时前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
木子欢儿8 小时前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
Devin~Y8 小时前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
coppher9 小时前
Ubuntu 22.04 amd64 离线安装 Docker 完整教程
linux·docker
虚伪的空想家10 小时前
k8s集群configmap和secrets备份脚本
linux·容器·kubernetes
SXJR10 小时前
k8s中的Pod
云原生·容器·kubernetes
文静小土豆10 小时前
K8s 滚动更新在 Java 应用中的实践与优化
java·容器·kubernetes
w61001046611 小时前
CKA-2026-Ingress
云原生·容器·kubernetes·cka
bloglin9999911 小时前
docker logs 如何一直监听日志输出
运维·docker·容器