美文网首页
Kakfa_消费者问题

Kakfa_消费者问题

作者: Eqo | 来源:发表于2022-08-09 23:38 被阅读0次

消费者消费数据的三种方式

指定topic     ~~~~ ~~~~ ~~~~读取的是指定topic下所有分区的数据
指定topic partition ~~~~ ~~~~ 读取的是指定topic下的某个分区的数据
指定topic partition offset ~~~~读取的是指定topic下 指定分区的 某个offset开始

订阅主题 subscribe 消费该主题的所有分区数据
订阅主题指定分区 assign 消费指定主题分区的数据
精准消费 定位消费 seek 消费指定主题分区 指定偏移量消费
需要先订阅topic 和 分区,然后才能seek 偏移量


消费者开始消费数据时,从哪里开始消费

  • step1: 第一次消费规则 由属性决定
    lastest 从0开始
    earliest 从最新的开始(默认)
      //设置消费的位置 从哪里开始消费  合法参数:latest |  earliest
      props.setProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"earliest");
  • step2:第二次及以后 从上一次消费完的offset +1位置开始消费

  • 以上成为消费记录,那么kafka如何保存消费记录的呢?
    ~~~~消费者内存中 自己维护 程序不断 不重启的情况下 【优先使用】。
    ~~~~持久化存储在磁盘、存储介质: 【重启程序的依据】
    ~~~~ ~~~~存储kafka中(默认) 自创了主题_consumer_offsets
    ~~~~ ~~~~ 存储zk/mysql/redis

内存消费记录:kafka自己记录的非常标准,但是程序重启之后就没有了,需要从文件当中读

文件消费记录:kafka自己有一个topic 专门用来存储每个消费者消费的offset


image.png

offset偏移量管理

消费者消费完的记录需要提交,怎样提交?

  • 自动提交
    • 根据时间周期提交下一下的消费的offset,默认每五秒提交一次
    • 风险:
      数据丢失
      数据重复


      image.png

为了防止数据丢失,或者重复消费我们选择手动提交

  • 手动提交offset
    先消费数据,然后再提交offset
    风险:如果此时我已经消费了两个分区的数据,第三个分区还没有消费完,程序崩溃了,offset没有提交,就会导致,下次程序启动的时候 重复消费数据
  • 手动提交--基于分区提交offset
    offsets.put(partition,new OffsetAndMetadata(consumerOffset+1));
    把当前分区消费的最后一条日志的offset +1,提交上去。
  • 手动提交分区offset探秘


    image.png

消费者消费数据分配策略

问题:Kafka 消费组Consumer Group中多个消费者Consumer如何消费Topic队列中数据?
前提-kafka中消费规则:
一个分区只能被一个消费者消费
一个消费者可以消费多个分区
最理想的状态:消费者和分区 一对一
策略:
范围分配
轮询分配
粘性分配

1_RangeAssignor 分配策略-范围分配

  • Kafka中默认的分配规则
  • 一个topic中所有的分区按照消费者的个数平均分,多的就分配给编号小的消费者
    优点:适用于消费topic比较少的情况,分配会比较平均
    ex: 一个topic内有七个分区 有三个消费者c1 c2 c3
    c1 (0,1,2) c2(3,4) c3(56)
    缺点: 不适应于多个消费者消费多个topic,会造成编号小的负载压力大的情况
    列如:三个消费者 消费三个topic 每个topic有7个分区会导致
    c1 -t1(0,1,2) t2(0,1,2) t3(0,1,2)
    c2 -t1(3,4) t2(3,4) t3(3,4)
    c3 t1(5,6) t2(5,6) t3(5,6)

2_RoundRobinAssignor 分配策略-轮询策略

  • 给每个Topic和其分区编号,轮询分配给消费者
    一个消费者分配一个 轮询分配
    适合:所有消费者都订阅相同的主题。
    缺点:如果有消费者故障 或者加入新的消费者 之前全推倒 重新分配
image.png
缺点: c1、c2消费第一个topic,c2、c3消费第二个Topic、c3消费第三个Topic,指定消费者消费Topic
会导致c3 (t2-p2,t3-p1-p2-p3)负载过大
3_StickyAssignor 分配策略-粘性策略(推荐)
粘性策略注意针对的是消费过程者,如果有消费者挂掉了.该如何分配其正在消费的分区.
不出故障的时候跟轮询一样,出故障之后正常的都不动,轮询的分配故障后的分区

相关文章

  • Kakfa_消费者问题

    消费者消费数据的三种方式 指定topic 读取的是指定topic下所有分区的数据指定topic parti...

  • 操作系统知识点持续更新

    生产者消费者问题 关于生产者消费者问题可以参考这篇文章:生产者消费者问题的java实现 临界区与互斥量 临界区:保...

  • 经典同步互斥问题

    生产者消费者问题 生产者消费者应当是最最基本的同步互斥问题了。生产者生产了之后消费者才消费,消费者消费之后,通知生...

  • 生产者和消费者问题

    生产者和消费者问题 问题简述 组成 系统中有一组生产者和消费者进程 生产者生产者将产品放入缓冲区 消费者消费者进程...

  • 2-1.死锁-经典同步问题

    三、经典同步问题 1.生产者-消费者问题 计算机系统中的许多问题都可归结为生产者与消费者问题,生产者与消费者可以通...

  • 生产者和消费者问题详解

    生产者和消费者问题详解 定义 生产者消费者问题(英语:Producer-consumer problem),也称有...

  • 消费者引流问题

    跟从某团的引领,来到一座独栋公寓,上四楼,是一家美发店。评论五百多条,消费定然在一千人次以上。总体来说,应该是一家...

  • java多线程

    生产者与消费者问题

  • 2018-12-02 就电商运营而言,淘宝运营在做什么

    题目:如标题所述。 1、对接消费者。回答消费者的疑惑/问题,寻求并反馈解决方案。2、对接店家。回答商铺的疑惑/问题...

  • 【nick】研究会,第四期:每日洞察的答疑分享

    问题一:消费者尝到的,就是他们想尝到的? 问题:“新可乐”案例:消费者尝到的,是他们想尝到的。 这句话怎么理解?还...

网友评论

      本文标题:Kakfa_消费者问题

      本文链接:https://www.haomeiwen.com/subject/zprowrtx.html