从 ZooKeeper 迁移到 KRaft 模式

从 Kafka 4.0 开始,将不再支持 ZooKeeper 模式。operator 也将在未来版本中移除对 ZooKeeper 模式的支持。建议尽快将您的 Kafka 实例迁移到 KRaft 模式。

重要版本说明
  • v4.2.x operator 仅支持 KRaft 模式:v4.2.x 中已完全移除 ZooKeeper 模式。
  • 升级到 v4.2.x 前必须完成迁移:如果计划升级到 Alauda Streaming Service for Kafka v4.2.x,必须先使用 v4.1.x operator 将所有实例迁移到 KRaft 模式。
  • v4.2.x 不支持迁移操作:v4.2.x operator 不支持 ZooKeeper 模式,无法执行从 ZooKeeper 到 KRaft 的迁移,必须在 v4.1.x 版本时完成迁移。
迁移注意事项
  • 服务中断:迁移过程中可能会导致短暂的服务中断。
  • 连接变更:迁移后,pod 名称和服务(svc)名称将发生变化,可能导致连接地址变动。迁移完成后务必及时更新实例的访问地址。如果您通过 bootstrap 或 external-bootstrap 服务连接 Kafka 实例,访问地址将保持不变,无需更新。
  • 不可回滚:迁移到 KRaft 后,不支持回滚到 ZooKeeper 模式。

前提条件

  • Kafka 版本必须为 3.8 或更高
  • 通知消费者/生产者可能出现的临时中断
  • 确保 Kafka 集群健康且正常运行
  • 验证当前 Kafka 实例的模式:
    kubectl get rdskafka -A -o custom-columns="NAME:.metadata.name,NAMESPACE:.metadata.namespace,MODE:.spec.mode,PHASE:.status.phase"
    该命令可帮助您识别仍处于 ZooKeeper 模式且需要迁移的实例。

迁移步骤

CLI
  1. 首先,检查 Kafka 实例当前的模式:
    kubectl get rdskafka -A -o custom-columns="NAME:.metadata.name,NAMESPACE:.metadata.namespace,MODE:.spec.mode,PHASE:.status.phase"
  2. 通过 patch 命令将 Kafka 实例切换到 KRaft 模式:
    kubectl patch rdsKafka <name> -n <namespace> --type=merge -p '{"spec":{"mode":"KRaft"}}'
  3. 监控迁移状态:
    kubectl get rdsKafka <name> -n <namespace> -o jsonpath='{.status.phase}'
    状态将依次为:
    • Migrating:迁移中
    • Active:迁移成功完成

迁移后步骤

迁移注意事项

如果您的应用未使用 bootstrapexternal-bootstrap 服务(例如,无论是内部访问还是外部访问,均使用 <name>-kafka-<i>.<namespace>.svc.cluster.local 相关的 IP 和端口),则必须更新其连接配置。

  1. 验证客户端连接性与数据完整性

    • 确认所有生产者和消费者应用均能成功连接 Kafka 集群(检查日志中是否有连接错误、超时或认证问题)。
    • 进行测试生产和消费:通过生产者发送测试消息,确认消费者能正确接收且无数据丢失或损坏。
    • 验证核心业务主题可访问且保留了迁移前的所有数据。
  2. 监控性能

    • 关注 controller 的性能表现
    • 监控分区处理和元数据操作情况