卡夫卡的藏书阁【Book17】- Kafka - KafkaJS 生产者 - 5

“He is terribly afraid of dying because he hasn’t yet lived.”
― Franz Kafka
456号你还是上飞机吧 这样对你比较好


重试机制

可选参数 retry 可以同时用在生产者跟消费者,可选参数 retry 是用来设定重试机制的相关参数,重试机制主要是用来重新连线和让 API 重新呼叫 Kafka 去新增或是取得讯息。

这边的重试机制很有趣,是使用一个会指数化成长的随机函式去决定每次重试间隔的时间,下面这个会详细介绍这个机制和相关参数的作用

  • 第一次重试:
    • 重试时间间格为 initialRetryTime 毫秒,预设为 300 毫秒
  • 第N次重试:
    • 公式为:Random(上一次的重试时间 * (1 - factor), 上一次的重试时间 * (1 + factor)) * multiplier
    • 当第二次重试时
      • 上一次的重试时间会等於 initialRetryTime 也就是 300 毫秒
      • factor 的预设值是0.2、multiplier的预设值是2
      • 带入公式後,Random(300 * (1 - 0.2), 300 * (1 + 0.2)) * 2,计算後是 Random(240, 360) * 2 也就是说,这一次的间隔会在480毫秒到720毫秒之间
    • 接着,当第三次重试时
      • 上一次的重试时间落在480毫秒到720毫秒之间,将上下限的数值分别带入公式
        • 480毫秒:Random(480 * (1 - 0.2), 480 * (1 + 0.2)) * 2,计算後是Random(768, 1152)毫秒
        • 720毫秒:Random(720 * (1 - 0.2), 720 * (1 + 0.2)) * 2,计算後是Random(1152, 1728)毫秒
      • 到这边分别取得了上下限,第三次重试的时间会随机落在768毫秒到1728毫秒之间
    • 之後依此类推下去

如果达到最大重试次数会喷错误: KafkaJSNumberOfRetriesExceeded、并且中断掉,生产者的部分会单纯将错误显示,消费者会根据重试次数去等待一段时间、并重启服务。

所有的可选选项:

  • maxRetryTime
    • 整个重试流程的总等待时间,单位是毫秒
    • 预设值:30000(毫秒)
  • initialRetryTime
    • 重试等待时间的初始值,会随着公式随机改变,单位是毫秒
    • 预设值:300(毫秒)
  • factor
    • 随机的系数
    • 预设值:0.2
  • multiplier
    • 指数化的系数
    • 预设值:2
  • retries
    • 每一次呼叫的总重试次数
    • 预设值:5(次)
  • restartOnFailure
    • 只有消费者使用、生产者不会使用这个参数,下面会详细说明
    • 预设值:async () => true

范例:

new Kafka({
  clientId: 'my-app',
  brokers: ['kafka1:9092', 'kafka2:9092'],
  retry: {
    initialRetryTime: 100,
    retries: 8
  }
})

<<:  Day16 中断 Lua 的执行 - coroutine

>>:  Day 0x15 - 代码建立 (Part 1: 回覆讯息代码)

DAY27 - 来加速你的网站!利用Web Worker创造多执行绪的Javascript

什麽是Web Worker? 它可以做什麽?在了解Web Worker前,可能需要先知道:网页中 J...

爬虫怎麽爬 从零开始的爬虫自学 DAY26 python网路爬虫开爬7-规模扩大

前言 各位早安,书接上回我们将程序码成功加上储存的功能,我们今天要来使它的规模更大更方便使用 开爬-...

Day29 资料流重新导向II

昨天我们聊到可以将指令执行的结果导向到档案里面,那我们其实就可以利用这个特性,制作一个垃圾桶黑洞装置...

IOS、Python自学心得30天 Day-7 TensorFlow 结果预测

执行过後的结果大概是像这样 不过执行结果并不理想 不确定是否是训练样本不足 还是训练模型时的设定没有...

Day 16 self-attention的实作准备(二) 设定tensorflow和keras的环境

前言 昨天在建立环境的时候发现有很多相容性的问题,因此今天我想说这几天先来学习一下tensorflo...