首页 > 其他分享 >kafka生产者

kafka生产者

时间:2022-11-30 10:15:34浏览次数:28  
标签:同步 生产者 ISR partition kafka ack follower leader

分区策略:

  分区原因:

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

  可以提高并发 因为可以以partition为单位进行读写

  分区原则:

  将producer发送的数据封装成一个ProducerRecord对象

    1)在指明partition的情况下,直接将指明得知当做partition的值

    2)没有指明partition的值但是有key的值 将key的hash值与topic的partition的个数进行取余得到partition的值

    3)既没有 partition 值又没有 key 值的情况下,第一次调用时随机生成一个整数(后面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition值,也就是常说的 round-robin 算法

 

为可保证producer发送的数据能可靠的发送到指定的topic上,topic的每个partition收到producer发送的数据后 都需要向producer发送ack确认指令,如果producer收到ack指令就会进行下一轮的发送,否则重新发送数据

面试题目:

  1)何时发送ack?

  确保有follower与leader同步完成时,leader在发送ack,这样才能保证leader挂掉之后在能从follower中选举出新的leader

  2)多少个follower同步完成后发送ack

  半数以上的follower完成同步即可发送ack,或者当全部的follower完成同步后下发送ack

  副本数据同步策略:

  方案一:半数以上完成同步,就发送ack

  优点:延迟低

  缺点:选举新的 leader 时,容忍 n 台节点的故障,需要 2n+1 个副本

  方案二:全部完成同步发送ack

  优点:选举新的leader时容忍n台结点故障,需要n+1个副本

  缺点:延迟高

  kafka选择第二种方案 原因:

同样是为了容忍n台结点故障,第一种方案需要2n+1个副本,而第二种方案需要n+1个副本,而kafka的每个分区中有大量的数据,第一种方案会造成大量数据的冗余
虽然第二种方案的延迟性比较高,但是网络延迟对kafka的延迟比较小

ISR

采用第二种方案之后,设想以下情景:leader 收到数据,所有 follower 都开始同步数据,但有一个 follower,因为某种故障,迟迟不能与 leader 进行同步,那 leader 就要一直等下去,直到它完成同步,才能发送 ack。这个问题怎么解决呢?

Leader 维护了一个动态的 in-sync replica set (ISR),意为和 leader 保持同步的 follower 集合。当 ISR 中的 follower 完成数据的同步之后,leader 就会给 follower 发送 ack。如果 follower长 时 间 未 向 leader 同 步 数 据 , 则 该 follower 将 被 踢 出 ISR , 该 时 间 阈 值 由replica.lag.time.max.ms 参数设定。Leader 发生故障之后,就会从 ISR 中选举新的 leader

 

ack应答机制

对于某些不太重要的数据来说,对数据的可靠性要求不是很高,能够容忍数据的少量丢失,没必要等到ISR中的follower全部接收成功

kafka为用户提供了三种可靠级别:

0:producer 不等待 broker 的 ack,这一操作提供了一个最低的延迟,broker 一接收到还没有写入磁盘就已经返回,当 broker 故障时有可能 丢失数据;

1:producer 等待 broker 的 ack,partition 的 leader 落盘成功后返回 ack,如果在 follower同步成功之前 leader 故障,那么将会 丢失数据 

-1(all):producer 等待 broker 的 ack,partition 的 leader 和 follower 全部落盘成功后才返回 ack。但是如果在 follower 同步完成后,broker 发送 ack 之前,leader 发生故障,那么会造成 数据重复

 

故障处理

LEO:指的是每个副本最大的offset

HW:指的是消费者能见到的最大的offset ISR中最小的LEO

1)follower故障

  follower发生故障时会被临时踢出ISR 待该follower恢复后,follower会记录本地磁盘记录的上的的HW,并将log文件高于HW的部分截取掉从 HW 开始向 leader 进行同步。等该 follower 的 LEO 大于等于该 Partition 的   的 HW,即 follower 追上 leader 之后,就可以重新加入 ISR 了

2)leader故障

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

 注意:这只是保证的副本之间数据的一致性,并不能保障数据不丢失或者不重复

 

标签:同步,生产者,ISR,partition,kafka,ack,follower,leader
From: https://www.cnblogs.com/lkd0910/p/16936822.html

相关文章

  • 大数据学习之kafka
    kafka是一个分布式的基于发布/订阅模式的消息队列,只要应用于大数据实时处理领域消息队列的两种模式:点对点模式(一对一消费者主动拉取数据,消息收到后消息清除)......
  • Kafka 生产者Producer
    Kafka生产者Producer原理producer和consumer过去直接与Zookeeper连接,以获得这些信息。现在Kafka已经脱离了这种耦合,从0.8版和0.9版开始,客户端直接从Kafkabrokers那里......
  • Kafka基本概念大全
    下面给出Kafka一些重要概念,让大家对Kafka有个整体的认识和感知,后面还会详细的解析每一个概念的作用以及更深入的原理•Producer:消息生产者,向KafkaBroker发消息的......
  • Kafka基本概念大全
    下面给出Kafka一些重要概念,让大家对Kafka有个整体的认识和感知,后面还会详细的解析每一个概念的作用以及更深入的原理•Producer:消息生产者,向KafkaBroker发消息的......
  • Kafka 控制器Controller
    Kafka控制器ControllerBroker在启动时,会尝试去ZooKeeper中创建/controller节点。Kafka当前选举控制器的规则是:第一个成功创建/controller节点的Broker会被指定......
  • 大数据工具zookeeper、Kafka、Seaweedfs配置安装使用
    ZookeeperZookeeper是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务......
  • k8s容器中通过Prometheus Operator部署Kafka Exporter监控Kafka集群
    写在前面在按照下面步骤操作之前,请先确保服务器已经部署k8s,prometheus,prometheusoperator以及kafka集群,关于这些环境的部署,可以自行查找相关资料安装部署,本文档便不在此......
  • Kafka的Exactly-once语义与事务机制
    https://www.cnblogs.com/luxiaoxun/p/13048474.htmlKafka0.11.x版本(对应ConfluentPlatform3.3),该版本引入了exactly-once语义。精确一次确实很难实现(Exactly-onceis......
  • apache kafka系列之客户端开发-java
    1.依赖包    <dependency>      <groupId>org.apache.kafka</groupId>      <artifactId>kafka_2.10</artifactId>      <ver......
  • Kafka 设计与原理详解
    一、Kafka简介本文综合了我之前写的kafka相关文章,可作为一个全面了解学习kafka的培训学习资料。1.1背景历史当今社会各种应用系统诸如商业、社交、搜索、浏览等像信息工厂......