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
相关推荐
金刚猿5 小时前
01_虚拟机中间件部署_root 用户安装 docker 容器,配置非root用户权限
docker·中间件·容器
JH_Kong5 小时前
解决 WSL 中 Docker 权限问题:从踩坑到完整修复
docker·容器
忆~遂愿6 小时前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
陈桴浮海7 小时前
Kustomize实战:从0到1实现K8s多环境配置管理与资源部署
云原生·容器·kubernetes
ask_baidu8 小时前
KafkaUtils
kafka·bigdata
洛豳枭薰9 小时前
消息队列关键问题描述
kafka·rabbitmq·rocketmq
70asunflower9 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
lucky670710 小时前
Spring Boot集成Kafka:最佳实践与详细指南
spring boot·kafka·linq
ShiLiu_mtx10 小时前
k8s - 7
云原生·容器·kubernetes
春日见10 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设