kafka学习笔记(二)------生产者介绍

生产者发送消息的过程
  • kafka会将发送消息包装成为ProducerRecord 对象, ProducerRecord
    对象包含了目标主题和要发送的内容,同时还可以指定键和分区。在发送 ProducerRecord
    对象前,生产者会先把键和值对象序列化成字节数组,这样它们才能够在网络上传输。
  • 接下来,数据被传给分区器。如果之前已经在 ProducerRecord 对象里指定了分区,那么分区器就不会再做任何事情。如果没有指定分区 ,那么分区器会根据ProducerRecord对象的键来选择一个分区,紧接着,这条记录被添加到一个记录批次里,这个批次里的所有消息会被发送到相同的主题和分区上,如果没有指定分区和没有指定key的情况下,分区器就会根据轮询的方式把这些消息推送到相应的主体和分区上,有一个独立的线程负责把这些记录批次发送到相应的broker上。
  • 服务器在收到这些消息时会返回一个响应。如果消息成功写入 Kafka,就返回一个 RecordMetaData 对象,它包含了主题和分区信息,以及记录在分区里的偏移量。如果写入失败,则会返回一个错误。生产者在收到错误之后会尝试重新发送消息,如果达到指定的重试次数后还没有成功,则直接抛出异常,不再重试
分区原则
  • 指定partition的情况下,直接将指明的值作为partition值
  • 没有指定partition的情况下,但是指定了key,将key的hash值与topic的partition进行取模得到partition值
  • 既没有partition 也没有key 的情况下,第一次随意生成一个整数(后面每次调用在这个整数上自增),将这个值与topic可用的partition总数取余得到partition的值
    在这里插入图片描述
数据可靠性保证
  • 为了保证生产者发的数据都可以到达相应的partition,topic的partition收到生产者的发送的数据之后都需要向生产者发送ack确认收到,如果生产者收到ack就会进行下一轮数据发送,否则重新发送数据
  • kafka选择的副本数据同步策略使 当所有的副本全部同步完成,才发送ack,虽然这种方案网络延迟会比较高,但网络延迟对kafka的影响较小。
  • ISR动态选择,根据每个follower同步数据的时间快慢 标记出用来参考的follower的 当这些被标记的follower数据同步完成就发送ack表示数据同步完成
acsk
   0: producer不等待broker的ack,这样可以提供最低的延迟,broker一接收到还没有写入到磁盘就返回ack,当broker出现故障的时候可能会丢失数据

   1:producer等待broker返回ack,partition的leader写入磁盘成功返回ack,如果follower同步成功之前leader出现故障 也会丢失数据

在这里插入图片描述

   -1:producer等待broker返回ack ,partition的leader和follower都写入磁盘成功才返回ack,如果在follower同步完成后,broker发送ack之前,leader发生故障,会导致数据重复发送 ,数据会出现重复。

在这里插入图片描述

故障处理:

1.log文件中的HW和LEO

LEO所有副本中的最大的一个offfset
HW 所有副本中最小的LEO,也是消费者能够接收到的最大offset
在这里插入图片描述

2.follower故障

follower 发生故障,会被临时提出ISR,等待恢复之后,follower会读取本地磁盘记录的上次HW,并将log文件高于HW的数据截取掉,从HW开始向leade进行同步数据,等待follower的LEO大于等于改partition的HW,即follower追上了leader,就可以加入到ISR

  1. leader故障

leader发生故障之后,会从ISR中选择新的leader,之后为了保证多个副本之间数据的一致性,其余的follower会先将各自的log文件中高于HW的部分数据截掉,然后从新的leader同步数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值