稳定性
- kafka的消息传输机制很直观,如果生产者向broker发送消息,commit之后.会被存到副本里面,他就不会丢失了.
- 如果在发送之后,网络出现问题,producer无法判断消息是否commit了,但是可以retry多次,直到确认已经在broker那commit.也就是至少一次,at least once
幂等性
- 对接口调用产生的结果和调用一次的是一致的,主要解决生产者在进行重试的时候可能会重复写入消息
- 限制条件
- 只能保证Producer在单个会话内不丢不管,如果Producer出现意外挂掉再重启是无法保证
- 幂等性无法跨越多个Topic-Partition,只能保证单个分区内的幂等性
- 使用:把Producer的配置enable.idempotence设置为true
Properties props = new Properties();
props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG,“true”);
props.put(“acks”,“all”);//当enable.idempotence为true,这里默认为all
事务
- 幂等性只能保证单个分区,而事务可以保证多个分区写入的原子性
- 使用:需要提供唯一的transactionalId
properties.put(ProducerConfig.transational_id_config,transactionId);
- 前置条件,设置上面的transcationalId之外,还需要把ProducerConfig.ENABLE_I

本文深入探讨Kafka的稳定性特性,包括幂等性如何保证单个分区内的消息不重复,事务如何实现多分区的原子性写入,以及控制器的角色和选举机制。同时,分析了Kafka如何确保数据可靠性与一致性,并提出了处理消息重复的解决方案。
最低0.47元/天 解锁文章
3135

被折叠的 条评论
为什么被折叠?



