使用docker swarm安装kafka集群

使用docker swarm安装kafka集群

做一个具有高性能,高可用,高并发的kafka集群,有以下要求:

  1. 使用docker swarm安装,使用overlay网络 ,集群节点设置为3个
  2. 保留历史数据,并且可备份,可恢复,可读取历史数据。
  3. 设置数据七天过期
  4. 将所有能挂载的目录都挂载出来
    那么怎么编写docker-compose.yaml?如何设置zookeeper配置文件中的参数?如何设置kafka配置文件中的参数?

安装脚本

docker-compose.yaml

version: '3.8'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    container_name: zookeeper
    networks:
      - kafka-net
    volumes:
      - zookeeper-data:/var/lib/zookeeper/data
      - zookeeper-logs:/var/lib/zookeeper/logs
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      
   kafka1:
    image: confluentinc/cp-kafka:latest
    container_name: kafka1
    depends_on:
      - zookeeper
    networks:
      - kafka-net
    ports:
      - "9092:9092"
    volumes:
      - kafka-data:/var/lib/kafka/data
      - kafka-logs:/var/lib/kafka/logs
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: PLAINTEXT://:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"  #是否自动创建topic
      KAFKA_LOG_RETENTION_HOURS: 168
      KAFKA_LOG_RETENTION_BYTES: -1
      KAFKA_LOG_CLEANUP_POLICY: delete,compact
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      #KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.auth.SimpleAclAuthorizer
      #KAFKA_SUPER_USERS: User:admin;User:superuser
      #KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf"
      
   kafka2:
    image: confluentinc/cp-kafka:latest
    container_name: kafka2
    depends_on:
      - zookeeper
    networks:
      - kafka-net
    ports:
      - "9093:9092"
    volumes:
      - kafka-data:/var/lib/kafka/data
      - kafka-logs:/var/lib/kafka/logs
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: PLAINTEXT://:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9092
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" #是否自动创建topic
      KAFKA_LOG_RETENTION_HOURS: 168
      KAFKA_LOG_RETENTION_BYTES: -1
      KAFKA_LOG_CLEANUP_POLICY: delete,compact
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      #KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.auth.SimpleAclAuthorizer
      #KAFKA_SUPER_USERS: User:admin;User:superuser
      #KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf"
      
   kafka3:
    image: confluentinc/cp-kafka:latest
    container_name: kafka3
    depends_on:
      - zookeeper
    networks:
      - kafka-net
    ports:
      - "9093:9092"
    volumes:
      - kafka-data:/var/lib/kafka/data
      - kafka-logs:/var/lib/kafka/logs
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: PLAINTEXT://:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9092
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false" #是否自动创建topic
      KAFKA_LOG_RETENTION_HOURS: 168
      KAFKA_LOG_RETENTION_BYTES: -1
      KAFKA_LOG_CLEANUP_POLICY: delete,compact
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      #KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.auth.SimpleAclAuthorizer
      #KAFKA_SUPER_USERS: User:admin;User:superuser
      #KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf"
      
 networks:
  kafka-net:
    driver: overlay
 volumes:
  zookeeper-data:
  zookeeper-logs:
  kafka-data:
  kafka-logs:

脚本部分:

  • 首先,需要运行一个名为 docker-compose.yaml 的Docker Compose文件,该文件定义了Kafka集群的配置和部署。
  • version 字段指定了使用的Docker Compose版本。
  • services 字段定义了Kafka集群中的服务,包括ZooKeeper和Kafka本身。
  • zookeeper 服务使用 zookeeper:latest 镜像,并在Docker Swarm中部署一个副本。
  • kafka 服务使用 confluentinc/cp-kafka:latest 镜像,并依赖于ZooKeeper服务。它在Docker Swarm中部署了3个副本。
  • environment 字段定义了Kafka容器的环境变量,包括广告侦听器、ZooKeeper连接和偏移量主题的复制因子等。
  • ports 字段将Kafka容器的9092端口映射到主机的9092端口,以便外部应用程序可以连接到Kafka集群。
  • volumes 字段定义了一个名为 kafka-data 的卷,用于持久化Kafka数据。
  • configs 字段指定了一个名为 kafka-server-config 的配置,用于指定Kafka服务器的配置文件。
  • networks 字段定义了一个名为 kafka-net 的网络,用于连接Kafka集群中的服务。
    在这个示例中,我们使用了 Confluent 提供的 Docker 镜像,并设置了一个具有两个 Kafka 节点的集群。其中, kafka1kafka2 分别代表两个 Kafka 节点。每个节点都依赖于 zookeeper 服务,并使用了 overlay 网络。
    我们还挂载了所有可挂载的目录,包括 ZooKeeper 的数据目录和日志目录,以及 Kafka 的数据目录和日志目录。

kafka配置文件

还需要创建 Kafka 配置文件 server.properties ,用于更详细地配置 Kafka。以下是一个示例的 server.properties 文件:

broker.id=1
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka1:9092
zookeeper.connect=zookeeper:2181
#用于控制每个分区(partition)在磁盘上保留的日志时间
log.retention.hours=168
#不限日志分区大小
log.retention.bytes=-1
#日至清理策略 delete删除,compacte 压缩
log.cleanup.policy=delete,compact 
#控制消费者组(consumer group)的初始平衡延迟时间,参数的取值可以是任意非负整数
group.initial.rebalance.delay.ms=0
#authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
#super.users=User:admin;User:superuser

这个示例中的配置与 docker-compose.yaml 文件中的环境变量对应。可以根据需要修改这些配置参数。

配置部分:

  • 配置文件 server.properties 是Kafka服务器的配置文件。
  • 通过 configs 字段中的 kafka-server-config 配置,将 server.properties 文件挂载到Kafka容器的 /etc/kafka/server.properties 路径上。
  • server.properties 文件中包含了一些Kafka服务器的配置选项,可以根据需要进行自定义。例如,可以在此文件中配置历史数据留存和数据过期时间等参数。
    通过理解这些脚本和配置,可以更好地了解如何使用Docker Compose和配置文件来部署和配置Kafka集群

Kafka 的权限认证配置文件

另外,还需要创建 Kafka 的权限认证配置文件 kafka_server_jaas.conf ,以下是一个示例的 kafka_server_jaas.conf 文件:

KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret"
    user_superuser="superuser-secret";
};

这个示例中使用了简单的用户名和密码认证方式。可以根据需要修改用户名和密码,并添加其他的认证方式。。

ZooKeeper服务器配置

以下是一个示例的ZooKeeper配置文件(zookeeper.properties)的设置:

dataDir=/tmp/zookeeper
clientPort=2181
maxClientCnxns=0
tickTime=2000
initLimit=5
syncLimit=2
server.1=localhost:2888:3888

上述示例中的配置文件包含了一些常见的ZooKeeper服务器配置项。可以根据需求进行调整和扩展。。

注意事项

在使用docker安装kafka时,需要注意以下几个问题:

  1. 确定所需版本:确保选择正确的Kafka版本。可以在DockerHub上查看可用版本。

  2. 配置网络:确保正确设置网络端口,以便容器能够与外部通信。

  3. 持久化数据:为确保数据安全,建议将Kafka数据挂载到宿主机上,以便在容器重启或销毁时数据不会丢失。

  4. 配置Zookeeper:Kafka需要Zookeeper来管理其集群状态,因此需要确保正确配置Zookeeper。

使用时需要注意以下几个问题:

  1. 监控和日志:Kafka在生产环境中要求进行严格监控和日志记录,以便及时检测和处理问题。

  2. 性能优化:配置Kafka以实现最佳性能。建议使用SSD硬盘,提高磁盘读写速度;调整JVM内存参数;以及使用分区和副本来提高吞吐量。

  3. 安全性:Kafka传输的数据可能包含敏感信息,因此需要考虑网络安全、身份验证和数据加密等方面的问题。

  4. 生产环境部署:当将Kafka用于生产环境时,需要考虑多种因素,例如数据一致性、高可用性和性能问题。建议使用多个Kafka节点来实现高可用,同时定期备份数据以确保数据安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值