kafka可靠的数据传递---在可靠的系统里使用生产者

作为消息中间件,kafka为了保证消息传递的可靠性,做了很多工作,今天分享这几方面:可靠性保证,复制,broker配置,在可靠的系统里使用生产者。

一.可靠性保证

为了保证kafka整个系统的可靠性,kafka做了如下几方面的工作:
1:Kafka可以保证分区消息的顺序,如果使用同一个生产者往同一个分区写入消息,而且消息B在消息A之后写入,那么Kafka可以保证消息B的偏移量比消息A的偏移量大,而且消费者先读取消费者A再读取消费者B
2:只有当消息被写入分区的所有同步副本时,它才被认为是“已提交”的。
3:只要还有一个副本是活跃的,那么已经提交的消息就不会丢失。
4:消费者只能读取已经提交的信息

二.复制

为了保证副本是同步的,需要满足以下条件:
1:分区副本与Zookeeper之间有一个活跃的会话,也就是说,它在过去6s内向zookeeper发送过心跳
2:在过去的10s内从首领那里获取过消息
3:不仅从首领那里获取消息,而且还必须是零延迟的

三.Broker配置

1:复制系数:用于控制同一条消息被存储几分,例如复制系数是3就保存三份。复制系数越高,可用性和可靠性就越高,性能会越低,反之亦然。

2:不完全的首领选举:在选举的过程中发生了数据丢失,也就是说提交的数据没有同时保存到所有副本
3:出现场景:

  1. 分区有三个副本,其中两个跟随者副本不可用(两个broker发生崩溃)。假设首领也不可用了,这个时候如果之前的一个跟随者重新启动,它就成为了分区的唯一不同步副本。
  2. 分区有三个副本,因为网络问题导致两个跟随者副本复制消息之后。假设首领也不可用了,另外两个副本就再也无法变成同步的了。

4:两难选择:

  1. :等待原先首领重新上线,这将导致在恢复前不可用。
  2. :不同步的副本被提升为新首领,这样会丢失一部分消息。

5:最少同步副本:用来控制分区首领的行为。例如存在三个分区副本,最少同步副本设置为2,那么其中有一个副本不可用,则没什么问题,如果两个分区副本都不可用,那么broker就会停止接受生产者的请求。消费者仍然可以继续读取已有数据

四.在可靠的系统里使用生产者

1:发送确认:发送确认存在三种情况:

  1. Acks=0:生产者能够通过网络把消息发送出去,就认为消息已经成功写入Kafka。特点是速度快,吞过量高,带宽利用率高,但是一定会丢失一些消息;
  2. Acks=1:首领收到消息并写入到分区时会返回确认或错误响应。特点是可能会丢失一些消;
  3. Acks=All:首领在返回确认或错误响应之前,会等待所有的副本都收到消息。特点是这是最保险的做法,通常会降低吞吐量;

2:配置生产者的重试次数,生产者需要处理的错误包括两个部分:

  1. 一部分是生产者可以自动处理的错误
  2. 一部分是开发者手动处理的部分

3:生产者收到的消息分两种,一种是在重试之后可以解决的,另一种是无法通过重试解决的:

  1. LEADER_NOT_AVALABLE:首领不可用,也许在重试后,首领已经选取成功了。
  2. INVALID_CONFIG:配置错误重试也无法解决,因此无需重试。

4:额外的消息处理,开发人员需要处理的错误如下所示:

  1. 不可重试的broker错误,例如消息大小错误,认证错误等 ;
  2. 在消息发送前发生的错误,例如序列化错误;
  3. 生产者达到重试次数上线时或者在消息占用的内存达到上线时发生的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值