更新时间:2025-12-26 GMT+08:00
分享

配置Kafka高可用和高可靠

操作场景

Kafka消息传输保障机制,可以通过配置不同的参数来保障消息传输,进而满足不同的性能和可靠性要求。本章节介绍如何配置Kafka高可用和高可靠参数。

对系统的影响

  • 配置高可用、高性能模式后,数据可靠性会降低。在磁盘故障、节点故障等场景下存在数据丢失风险。
  • 配置高可靠性的影响:
    • 性能降低:

      在生产数据时,配置了高可靠参数ack=-1之后,需要多个副本均写入成功之后才认为是写入成功。这样会导致单条消息时延增加,客户端处理能力下降。具体性能以现场实际测试数据为准。

    • 可用性降低:

      不允许不在ISR中的副本被选举为Leader。如果Leader下线时,其他副本均不在ISR列表中,那么该分区将保持不可用,直到Leader节点恢复。当分区的一个副本所在节点故障时,无法满足最小写入成功的副本数,那么将会导致业务写入失败。

  • 参数配置项为服务级配置需要重启Kafka,建议在变更窗口做服务级配置修改。

高可用和高性能配置

如果业务需要保证高可用和高性能,可以参考以下步骤操作。

  • 方法一:通过服务端配置
    1. 登录FusionInsight Manager。

      登录集群Manager具体操作,请参考访问MRS集群Manager

    2. 选择“集群 > 服务 > Kafka > 配置 > 全部配置”。
    3. 搜索以下参数名称,并根据实际需要修改参数值。
      表1 服务端高可用性和高性能参数说明

      参数

      默认值

      说明

      unclean.leader.election.enable

      false

      是否允许不在ISR中的副本被选举为Leader。

      • true:允许不在ISR中的副本被选举为Leader,避免因副本故障导致分区完全不可用。

        如果设置为true,且Producer中配置acks=1或者acks=0,在副本没有同步完成的情况下重启Leader所在的Broker,可能会造成数据丢失。

      • false:确保Leader是ISR中的副本,避免数据不一致。

      auto.leader.rebalance.enable

      true

      是否使用Leader自动均衡功能。

      • true:Controller会周期性地为所有节点的每个分区均衡Leader,将Leader分配给更优先的副本。
      • false:不使用Leader自动均衡功能。

      min.insync.replicas

      1

      当Producer设置acks为-1时,指定需要写入成功的副本的最小数目。

    4. 保存修改的配置。保存完成后请重新启动配置过期的服务或实例以使配置生效。
  • 方法二:通过服务端配置
    1. root用户登录安装Kafka客户端的节点。
    2. 执行以下命令,编辑客户端配置文件producer.properties
      vi Kafka客户端安装路径/Kafka/kafka/config/producer.properties
    3. 根据需要配置下表中参数,并保存文件。
      表2 客户端高可用性和高性能参数说明

      参数

      默认值

      说明

      acks

      1

      需要Leader确认消息是否已经接收并认为已经处理完成。该参数会影响消息的可靠性和性能。

      • acks=0:Producer将不会等待服务端任何响应。消息将会被认为成功。
      • acks=1:当副本所在Leader确认数据已写入,但是其不会等待所有的副本完全写入即返回响应。在这种情况下,如果Leader确认后但是副本未同步完成时Leader异常,那么数据就会丢失。
      • acks=-1:意味着等待所有的同步副本确认后才认为成功,配合“min.insync.replicas”可以确保多副本写入成功,只要有一个副本保持活跃状态,记录将不会丢失。

数据高可靠性配置

如果业务需要保证数据高可靠性,可以参考以下步骤操作。

  • 方法一:通过服务端配置
    1. 登录FusionInsight Manager。

      登录集群Manager具体操作,请参考访问MRS集群Manager

    2. 选择“集群 > 服务 > Kafka > 配置 > 全部配置”。
    3. 搜索以下参数名称,并根据实际需要修改参数值。
      表3 服务端高可靠性参数说明

      参数

      建议值

      说明

      unclean.leader.election.enable

      false

      是否允许不在ISR中的副本被选举为Leader。

      • true:允许不在ISR中的副本被选举为Leader,避免因副本故障导致分区完全不可用。

        如果设置为true,且Producer中配置acks=1或者acks=0,在副本没有同步完成的情况下重启Leader所在的Broker,可能会造成数据丢失。

      • false:确保Leader是ISR中的副本,避免数据不一致。

      min.insync.replicas

      2

      当Producer设置acks为-1时,指定需要写入成功的副本的最小数目。

      需要满足min.insync.replicas <= replication.factor。

    4. 保存修改的配置。保存完成后请重新启动配置过期的服务或实例以使配置生效。
  • 方法二:通过服务端配置
    1. root用户登录安装Kafka客户端的节点。
    2. 执行以下命令,编辑客户端配置文件producer.properties
      vi Kafka客户端安装路径/Kafka/kafka/config/producer.properties
    3. 根据需要配置下表中参数,并保存文件。
      表4 客户端高可靠性参数说明

      参数

      建议值

      说明

      acks

      -1

      Producer需要Leader确认消息是否已经接收并认为已经处理完成。

      acks=-1:需要等待在ISR列表的副本都确认接收到消息并处理完成才表示消息成功。配合“min.insync.replicas”可以确保多副本写入成功,只要有一个副本保持活跃状态,记录将不会丢失,此参数配置为-1时,会降低生产性能,请权衡后配置。

配置建议

请根据以下业务场景对可靠性和性能要求进行评估,采用合理参数配置。

  • 对于价值数据,这两种场景下建议Kafka数据目录磁盘配置raid1或者raid5,从而提高单个磁盘故障情况下数据可靠性。
  • 参数配置项均为Topic级别可修改的参数,默认采用服务级配置。

    可针对不同Topic可靠性要求对Topic进行单独配置。

    例如,root用户登录Kafka客户端节点,在客户端安装目录下配置Topic的可靠性参数命令:

    cd Kafka客户端安装路径/Kafka/kafka/bin
    kafka-configs.sh --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties --alter --topic 主题名称 --add-config unclean.leader.election.enable=false,min.insync.replicas=2
  • 参数配置项为服务级配置需要重启Kafka,建议在变更窗口做服务级配置修改。

相关文档