扩容 Kafka 集群

Kafka 在蓝鲸架构中,用于数据上报通道的队列缓存。在数据链路中,生产者是 GSE 组件的 gse_data 进程,将 agent 上报的监控时序数据或者日志采集数据 写入到 kafka 集群。消费者是监控后台的 transfer 进程,将队列中的数据消费,清洗,并入库到相应存储中。

本教程描述了如何在蓝鲸社区版中扩容 Kafka 集群。

  • 要使一个副本集能提供足够的冗余,至少需要部署三个 Broker ,所以新增节点数必须为偶数,至少增加两台机器。
  • 官方的扩容指引:https://kafka.apache.org/0100/documentation.html#basic_ops_cluster_expansion
  • Kafka 扩容集群很简单,只需要分配一个唯一的 Broke id 即可加入集群
  • 扩容完成后,新的 Broker 中如果没有新增 Topic,这个节点是不会承载任何数据,所以需要用户手动迁移老的数据到新的 broker,以达到集群内均匀的负载分布。具体操作参考官方文档说明:https://kafka.apache.org/0100/documentation.html#basic_ops_cluster_expansion
  • 单机版部署的蓝鲸只有单 Kafka 集群,建议扩容至 3 个 Broker,实现容错和高可用性

Note for kafka

【缺陷详情】

  1. kafka的内置__consumer_offsets 的topic默认配置下可能会出现文件大小一直增长,不会减小的问题。
    时间长了,可能达到几百GB,影响kafka的使用。
  2. 调整kafka的启动参数,打开jmx的port,便于jmx export采集监控指标
  3. 调整systemd service的stop超时,防止被kill -9
  4. 一些kafka server.properties配置参数优化建议。

kafka 迁移 broker

采用重新分配分区,将 broker.id 1/2/3 平滑迁移至 4/5/6

  1. 新建节点(例如 4,5,6),并加入集群,确认 broker 都存活
    1
    2
    # 返回 [1, 2, 3, 4, 5, 6]
    /data/bkee/service/zk/bin/zkCli.sh -server zk.service.consul:2181 ls /common_kafka/brokers/ids