kafka之九 稳定性

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

稳定性

  • 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值