• kafka如何保证数据不被重复消费并且不丢失数据


    Kafka如何保证数据不重复消费,不丢失数据

    不重复消费:

    1.幂等操作,重复消费不会产生问题

    2. dstream.foreachRDD {(rdd, time) =

      rdd.foreachPartition { partitionIterator =>

        val partitionId = TaskContext.get.partitionId()

        val uniqueId = generateUniqueId(time.milliseconds,partitionId)将uniqueID存入数据库中

        //use this uniqueId to transationally commit the data in partitionIterator

     }

    }

    对每个partitionID,产生一个uniqueID,.只有这个partition的数据被完全消费,才算成功,否则失败回滚。下次若重复执行,就skip

    不丢失数据:丢失情况: 
    1.生产者数据不丢失
          同步模式:配置=1(只有Leader收到,-1所有副本成功,0不等待)。leader partition挂了,数据就会丢失。
                      解决:设置为-1保证produce写入所有副本算成功
              producer.type=sync
              request.required.acks=-1
          异步模式,当缓冲区满了,如果配置为0(没有收到确认,一满就丢弃),数据立刻丢弃
                    解决:不限制阻塞超时时间。就是一满生产者就阻塞
              producer.type=async 
              request.required.acks=1 
              queue.buffering.max.ms=5000 
              queue.buffering.max.messages=10000 
              queue.enqueue.timeout.ms = -1 
              batch.num.messages=200
    2.消费者数据不丢失 :流计算,基本数据源不适用。高级数据源以kafka为例,由2种方式:receiver(开启WAL,失败可恢复)和director(checkpoint保证)
    3.   若是storm在消费,开启storm的ackfail机制;若不是storm,数据处理完更新offset,低级API手动控制offset
    4.   Kafka发送数据过快,导致服务器网卡流量暴增。或磁盘过忙,出现丢包。
          1》  首先,对kafka进行限速,
          2》  其次启用重试机制,使重试间隔变长。
          3》  Kafka设置ack=all,即需要处于ISR(副本列表)的分区都确认,才算发送成功。    rops.put("compression.type", "gzip");
                   props.put("linger.ms", "50");
                   props.put("acks", "all")表示至少成功发送一次;
                   props.put("retries ", 30);
                   props.put("reconnect.backoff.ms ", 20000);

                   props.put("retry.backoff.ms", 20000)

     5.消费者速度很慢,导致一个session周期(0.1版本是默认30s)内未完成消费。导致心跳机制检测报告出问题。

       导致消费了的数据未及时提交offset.配置由可能是自动提交

                问题场景:1.offset为自动提交,正在消费数据,kill消费者线程,下次重复消费

             2.设置自动提交,关闭kafka,close之前,调用consumer.unsubscribed()则由可能部分offset没有提交。

                  3.消费程序和业务逻辑在一个线程,导致offset提交超时,

  • 相关阅读:
    vue实现图片路径传送
    title中添加小图标
    张钊的第一份作业
    张钊的第二份作业
    在Windows Server 2008 R2环境下安装活动目录失败的一个解决方法
    如何把SubVersion的服务程序变为Window后台服务形式
    一个关于静态方法调用的问题。
    WCF配置中遇到的问题:如何把Hostname修改成IP
    删除Visual Studio最近的项目(转载)
    有时候用ifstream或ofstream打开带有中文路径的文件会失败
  • 原文地址:https://www.cnblogs.com/huiandong/p/9402409.html
Copyright © 2020-2023  润新知