4.7. 恢复失败以避免数据丢失
如果消费者组中的故障,Kafka 提供了一个重新平衡协议,用于有效检测和恢复。为最大程度降低这些故障的潜在影响,一个关键策略是调整 max.poll.records
属性,以平衡高效处理与系统稳定性。此属性决定了消费者可在单个轮询中获取的最大记录数。微调 max.poll.records
有助于维护受控的消耗率,防止消费者不认为自己或 Kafka 代理。
另外,Kafka 还提供高级配置属性,如 session.timeout.ms
和 heartbeat.interval.ms
。这些设置通常为更具体的用例保留,在标准场景中可能不需要调整。
session.timeout.ms
属性指定消费者可以在不向 Kafka 代理发送心跳的情况下可以进入的最大时间,以指示它在消费者组中处于活跃状态。如果消费者无法在会话超时内发送心跳,则被视为不活跃。标记为 inactive 的消费者会触发主题对分区的重新平衡。设置 session.timeout.ms
属性值太低,可能会导致误报结果,而设置得太高可能会导致从故障中恢复。
heartbeat.interval.ms
属性决定了消费者向 Kafka 代理发送心跳的频率。连续心跳之间有一个较短的间隔,可以更快地检测消费者故障。heartbeat 间隔必须较低,通常由第三个,而不是会话超时。减少心跳间隔可减少意外重新平衡的几率,但更频繁的心跳会增加代理资源的开销。