• kafk优化3


      一、kafka在使用的时候还是会存在一些问题的,这里主要是记录kafka的优化方式,以及带来的问题。

      二、防止消息丢失和重复消费

      1、防止数据丢失

      1)发送方:ack设置为1或者-1/all,把min.insyc.replicas设置为分区数。(目的:ack为1主要是保证分区leader备份数据,ack为-1/all的情况下保证整体的leader和follow都进行备份,防止丢失)

      2)接收方:自动提交改成手动提交(目的:避免系统自动是,出现后台消费异常导致的数据丢失)

      2、重复消费

      1)关闭生产端的重试机制,消费端设置成手动提交。(目的:生产端避免重复发送,消费端:防止异常重复消费)这里会导致一个问题,就是丢失数据的问题,可以在防止消息消息的基础上,加上消费消息时幂等性。

      2)幂等性:a、mysql通过主键ID插入,主键ID唯一来保证。b、使用redis或者ZK的分布式锁。

      三、如何顺序消费(牺牲性能)

      1、发送方:ack不设置为0,关闭重试,采用同步方式发送,等到消息成功后发送下一条。

      2、接收方:发送方将消息发送到一个分区,只有一个消费组来进行消费。

      四、解决消息积压问题

      1、产生原因:消费者消费消息的速度远赶不上生产者生产的速度。kafka内部消息开始堆积,最终可能导致雪崩。

      2、解决方案:

      1)在消费者中使用多线程,提高消费能力。

      2)创建过个消费组,多个消费者,部署到不同的机器,提高消费能力。

      3)同一个组,建立另外的主体和分区,在主消费的poll下来数据后,不进行处理,直接转发到新的主体,进行消费,提高性能。

      五、延时队列

      1、使用场景:订单30分钟没有付款,需要取消订单等。

      2、消息发送者发送消息时带上消费发送的时间。

      3、消费者在进行(轮询)消费的时候,通过时间进行相关的逻辑处理。否者利用kafka的offset机制记录未消费的下标,后期进行下次消费判断。

  • 相关阅读:
    1301班 github安装及账户注册
    对于软件工程课程的疑问
    LeetCode50:Pow
    LeetCode49:字母异位词分组
    LeetCode46:全排列
    LeetCode38:外观数列
    LeetCode:有效的数独
    LeetCode34:在排序数组中查找元素的第一个位置和最后一个位置
    LeetCode33:搜索旋转排序数组
    LeetCode29:两数相除
  • 原文地址:https://www.cnblogs.com/ll409546297/p/15829393.html
Copyright © 2020-2023  润新知