AutoMQ集群部署:单机、集群、多区域部署指南

AutoMQ集群部署:单机、集群、多区域部署指南

【免费下载链接】automq AutoMQ is a cloud-native fork of Kafka by separating storage to S3 and EBS. 10x cost-effective. Autoscale in seconds. Single-digit ms latency. 【免费下载链接】automq 项目地址: https://gitcode.com/GitHub_Trending/au/automq

引言

你是否在寻找一种云原生的Kafka解决方案,能够实现10倍成本效益、秒级自动扩展和毫秒级延迟?AutoMQ作为Kafka的云原生分支,通过将存储分离到S3和EBS,为你提供了完美的解决方案。本文将详细介绍AutoMQ的单机部署、集群部署和多区域部署方法,帮助你快速上手并充分利用AutoMQ的优势。读完本文,你将能够根据实际需求选择合适的部署方式,并成功搭建起稳定高效的AutoMQ环境。

AutoMQ的架构设计使其在成本、扩展性和性能方面表现卓越,其核心优势在于将计算与存储分离,从而实现了资源的高效利用和灵活扩展。AutoMQ架构

部署前准备

在开始部署AutoMQ之前,确保你的环境满足以下要求:

  • Java 8+ 环境
  • Docker 和 Docker Compose(如需使用Docker部署)
  • Git(用于克隆仓库)

首先,克隆AutoMQ仓库:

git clone https://gitcode.com/GitHub_Trending/au/automq.git
cd automq

官方文档:docs/quickstart.html

单机部署

单机部署适用于开发、测试环境或小规模应用。AutoMQ提供了多种单机部署方式,包括传统方式和Docker方式。

传统方式部署

  1. 生成集群UUID:
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
  1. 格式化日志目录:
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
  1. 启动Kafka服务器:
bin/kafka-server-start.sh config/kraft/server.properties

Docker方式部署

使用Docker可以更快速地部署单机AutoMQ:

  1. 拉取AutoMQ Docker镜像(假设已构建或获取):
docker pull apache/kafka:latest
  1. 启动容器:
docker run -p 9092:9092 apache/kafka:latest

集群部署

对于生产环境,集群部署是必不可少的。AutoMQ支持多种集群部署模式,包括组合模式和隔离模式。

组合模式集群

在组合模式下,每个节点同时扮演Broker和Controller角色。以下是使用Docker Compose部署3节点集群的示例:

docker-compose.yml 文件内容(docker/examples/jvm/cluster/combined/plaintext/docker-compose.yml):

version: '2'
services:
  kafka-1:
    image: apache/kafka:latest
    hostname: kafka-1
    container_name: kafka-1
    ports:
      - 29092:9092
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: 'broker,controller'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
      KAFKA_CONTROLLER_QUORUM_VOTERS: '1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093'
      KAFKA_LISTENERS: 'PLAINTEXT://:19092,CONTROLLER://:9093,PLAINTEXT_HOST://:9092'
      KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:19092,PLAINTEXT_HOST://localhost:29092
      KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
      CLUSTER_ID: '4L6g3nShT-eMCtK--X86sw'
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'

  kafka-2:
    image: apache/kafka:latest
    hostname: kafka-2
    container_name: kafka-2
    ports:
      - 39092:9092
    environment:
      KAFKA_NODE_ID: 2
      KAFKA_PROCESS_ROLES: 'broker,controller'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
      KAFKA_CONTROLLER_QUORUM_VOTERS: '1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093'
      KAFKA_LISTENERS: 'PLAINTEXT://:19092,CONTROLLER://:9093,PLAINTEXT_HOST://:9092'
      KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:19092,PLAINTEXT_HOST://localhost:39092
      KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
      CLUSTER_ID: '4L6g3nShT-eMCtK--X86sw'
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'

  kafka-3:
    image: apache/kafka:latest
    hostname: kafka-3
    container_name: kafka-3
    ports:
      - 49092:9092
    environment:
      KAFKA_NODE_ID: 3
      KAFKA_PROCESS_ROLES: 'broker,controller'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
      KAFKA_CONTROLLER_QUORUM_VOTERS: '1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093'
      KAFKA_LISTENERS: 'PLAINTEXT://:19092,CONTROLLER://:9093,PLAINTEXT_HOST://:9092'
      KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-3:19092,PLAINTEXT_HOST://localhost:49092
      KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
      CLUSTER_ID: '4L6g3nShT-eMCtK--X86sw'
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'

启动集群:

docker compose -f docker/examples/jvm/cluster/combined/plaintext/docker-compose.yml up

隔离模式集群

隔离模式将Controller和Broker角色分离,提高了系统的稳定性和可维护性。部署示例可参考 docker/examples/jvm/cluster/isolated/plaintext/docker-compose.yml

多区域部署

多区域部署可以提高系统的可用性和容错能力。AutoMQ通过S3Stream模块实现跨区域数据复制和同步。

多区域部署架构

AutoMQ的多区域部署架构基于S3Stream,利用云存储服务实现跨区域数据共享和同步。S3Stream架构

配置多区域部署

  1. 在每个区域部署AutoMQ集群(参考集群部署部分)。

  2. 配置S3Stream模块,启用跨区域复制。修改服务器配置文件,添加以下配置:

s3.telemetry.metrics.enable=true
s3.telemetry.metrics.exporter.type=otlp
s3.telemetry.exporter.otlp.endpoint=http://${otlp-collector-endpoint}:4317
  1. 启动OTel Collector、Prometheus、Grafana等监控服务,实现跨区域监控:
cd docker/telemetry
./install.sh start

监控配置详情:docker/telemetry/README.md

部署验证

部署完成后,进行以下验证步骤确保集群正常运行:

  1. 创建测试主题:
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:29092 --partitions 3 --replication-factor 3
  1. 发送测试消息:
bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:29092
  1. 消费测试消息:
bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:29092,localhost:39092,localhost:49092
  1. 访问Grafana监控面板,检查集群状态:
http://localhost:3000

总结与展望

本文详细介绍了AutoMQ的单机部署、集群部署和多区域部署方法。AutoMQ作为云原生的Kafka分支,通过创新的存储分离架构,为用户提供了更具成本效益、更灵活的流处理解决方案。

未来,AutoMQ将继续优化云原生特性,提供更完善的多区域部署和灾备方案,进一步提升系统的可靠性和性能。

如果你觉得本文对你有帮助,请点赞、收藏并关注我们,获取更多AutoMQ相关的技术文章和最佳实践。下期预告:AutoMQ性能优化指南。

【免费下载链接】automq AutoMQ is a cloud-native fork of Kafka by separating storage to S3 and EBS. 10x cost-effective. Autoscale in seconds. Single-digit ms latency. 【免费下载链接】automq 项目地址: https://gitcode.com/GitHub_Trending/au/automq

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值