Kafka深入----Producer

本文详细介绍了Kafka的分区策略,包括为何使用分区以实现扩展性和并发性,以及ProducerRecord的分区原则。在数据可靠性方面,讨论了副本数据同步策略,如ISR(In-Sync Replicas)机制,以及不同ACKS设置对数据丢失和重复的影响。同时,提到了开启幂等性以确保 ExactlyOnce 语义,并解释了幂等性的概念和启用方式。
摘要由CSDN通过智能技术生成

Kafka----Producer

分区策略

  1. 原因

    • 方便扩展,每个partition可以通过调整以适应他所在的机器,而一个topic 有多个Partition 组成 因此整个集群可以适应任意大小的数据

    • 可以提高并发 以Partition进行读写

  2. 原则

    • 将生产者发送出的消息封装成ProducerRecord(行记录)
    • Inter partition :分区号
    • timestamp:时间戳
      - 当partition有值时,将直接作为分区号
      - 当partition没有值,但<K,V>有值时,将key的hash值与topic中的partition的值进行取余得到partition
      -当既没有partition和key值的时候,第一次调用时随机生成一个整数(之后调用时在这个整数上尽心递增),将这个值与Topic可用的partition总数取余得到partition值,也就是常说的round-robin算法

数据可靠性

在这里插入图片描述

副本数据同步策略

现有两个策略可以进行选择

策略一: 类似Zookeeper的机制,当半数n以上的机器故障,则需要2n+1台服务器进行
策略二:全部同步机制,只要存在一台机器上有副本就可以,只需要n+1台服务器

因此Kafka会选择策略二来节省数据,降低数据的冗余度

					当在发送ACK时如果有机器宕机则不会同步完成
					因此Kafka优化了策略,新加了==ISR==策略
ISR
  • in-sync replica set (ISR)同步副本
  • ISR将同步时间快,同步条数多的服务器列入ISR内
  • 当Leader挂掉之后在ISR中选取新的Leader
  • 可以选择为Leader的前提条件是1.同步的时间 2.同步的条数
  • 在高版本中成为Leader的前提条件为同步的时间
ACKS

acks

  • 0 producer不需要等待broker的ack 不需要重试,不需要去接收是否收到的消息(当broker发生故障时可能发生数据丢失
  • 1 producer只等待Leader写完 ,不等待Follower写完 (当同步到FollowerLeader发生故障,可能发生数据丢失)
  • -1(ALL)producer将会等待brokerackLeaderISR中的Follower全部完成后才会返回ack(当Follower同步完成之后,Leader发生故障,则ISR中将会选取新的Leader来完成刚刚的数据同步,就会造成数据重复
HW:High Watermark(高水位,所有副本中最小的LEO)
LEO:Log End Offset(每个副本的最后一个offset)
  • HW之前的数据才是Consumer可见的数据
  • 保障消费者消费时的一致性
  • HW之保持数据一致性,不能保证数据重复和丢失
  1. Leader发生故障
    - 当有新的Leader产生时
    - Follower将高于HW的部分截取掉
    - 然后从新的Leader上同步offset数据
  2. Follower发生故障
    - Follower 发生故障后会被临时踢出 ISR
    - 待该 Follower 恢复后,Follower 会读取本地磁盘
    - 记录的上次的 HW,并将 log 文件高于 HW 的部分截取掉
    - 从 HW 开始向 leader 进行同步
    - 等该 follower 的 LEO 大于等于该 Partition 的 HW
    - 即 follower 追上 leader 之后,就可以重新加入 ISR 了。

在这里插入图片描述

Exactly Once(精准一次性)
  • 当ACK= -1时 保证数据不丢失,可能重复数据(At Least Once)
  • 当ACK= 0时 最多只发送一次(At Most Once)
  • Exactly Once = At Least Once +== 幂等性==

幂等性

  • 在broker中进行处理
  • 在Kafka中进行去重
  • 向Server发送多少次重复数据,Server只会持续化一条

开启幂等性

  • 将生产者Producer的参数中enable.idompotence 设置为 ture 就可以
  • 当设置为true时 ack会默认为 -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值