kafka实现可靠的数据传递

如何保证消息的可靠性:

1.kafka可以保证分区消息的顺序。

2.消息被写入分区的所有副本才被认为已提交

3.消费者只能消费已经提交的消息。

4.只要有一个副本是活跃的,已经提交的消息就不会丢失。

核心:是复制机制

broke的配置:

(1)复制系数

(2)不完全的首领选举(首领不可用时,其他副本都是不可用的,是否允许不同步的副本成为首领)

(3)最少同步副本(如果最少同步副本的值设置成2,那么当可用副本的数量少于2的时候,broke会停止接受生产者的请求)

生产者的配置:

(1)发送确认(acks=0,1,all)

(2)重试次数(broke返回可重试错误的时候,重试的次数---首领不可用就是可重试错误,消息大小错误和认证错误则是不可重试的错误。)

(3)额外的错误处理

   A、消息大小错误、认证错误等

   B、在消息发送之前发生的错误,例如序列化错误:
   C、在生产者达到重试次数上限时或者在消息占用的内存达到上限时发生的错误。

消费者的配置

1.消费者的可靠性配置

(1)g roup.id 如果两个消费者具有相同的group.id井且订阅了同一个主题,那么每个消费者会分到主题分区的一个子集, 也就是说它们只能读到所有消息的一个子集(不过群组会读取主题所有的消息)。如果你希望消费者可以看到主题的所有消息,那么需要为它们设置唯一的group.id 。

(2)auto.offset.reset 这个参数指定了在没有偏移量可提交时(比如消费者第l 次启动时)或者请求的偏移量在broker 上不存在时(第4 章已经解释过这种场景),消费者会做些什么。这个参数有两种配置。一种是earliest ,如果选择了这种配置,消费者会
从分区的开始位置读取数据,不管偏移量是否有效,这样会导致消费者读取大量的重复数据,但可以保证最少的数据丢失。一种是latest ,如果选择了这种配置,消费者会从分区的末尾开始读取数据,这样可以减少重复处理消息,但很有可能会错过一些消息。

(3)第3 个是enable.auto.commit 。这是一个非常重要的配置参数,你可以让悄费者基于任务调度自动提交偏移量,也可以在代码里手动提交偏移量。自动提交的一个最大好处是,在实现消费者逻辑时可以少考虑一些问题。如果你在消费者轮询操作里处理所有的数据,那么自动提交可以保证只提交已经处理过的偏移量。自动提交的主要缺点是,无怯控制重复处理消息(比如消费者在自动提交偏移量之前停止处理悄息),而且如果把消息交给另外一个后台线程去处理,自动提交机制可能会在消息还没有处理完毕就提交偏移量。

(4)第4 个配置参数auto.commit.interval.ms与第3 个参数有直接的联系。如果选择了自动提交偏移量,可以通过该参数配置提交的频度, 默认值是每5 秒钟提交一次。一般来说,频繁提交会增加额外的开销,但也会降低重复处理消息的概率。

2.显示提交偏移量。

3.可以根据业务指定唯一性的key, 存放到一个地方(数据库、redis等),推荐redis或者mongodb.每次消费的时候,如果发现已经消费过,则直接跳过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值