ruby-on-rails - 如何检查 Ruby-Kafka 重试是否有效?
问题描述
在文档中提到生产者重试将消息发送到基于max_retries
.
所以我关闭了 Kafka,然后尝试了我的制作人。我收到这个错误
Fetching cluster metadata from kafka://localhost:9092
[topic_metadata] Opening connection to localhost:9092 with client id MYCLIENTID
ERROR -- : [topic_metadata] Failed to connect to localhost:9092: Connection refused
DEBUG -- : Closing socket to localhost:9092
ERROR -- : Failed to fetch metadata from kafka://localhost:9092
Completed 500 Internal Server Error in 486ms (ActiveRecord: 33.9ms)
这是有道理的,但是在retries
那之后永远不会发生。我已经从内到外阅读了文档,但我无法弄清楚这retries
实际上是如何触发的?
这是我的代码:
def self.deliver_message(kafka, message, topic, transactional_id)
producer = kafka.producer(idempotent: true,
transactional_id: transactional_id,
required_acks: :all,
max_retries: 5,
retry_backoff: 5)
producer.produce(message, topic: topic)
producer.deliver_messages
end
文档链接:
https://www.rubydoc.info/gems/ruby-kafka/Kafka/Producer#initialize-instance_method
先感谢您。
解决方案
重试基于生产者回调抛出的异常类型。根据回调文档,回调期间可能发生以下异常:
处理此记录期间引发的异常。如果没有发生错误,则为 Null。可能抛出的异常包括:
不可重试异常(致命,永远不会发送消息):
- 无效主题异常
- OffsetMetadataTooLargeException
- RecordBatchTooLargeException
- 记录太大异常
- 未知服务器异常
可重试异常(瞬态,可以通过增加#.retries 来覆盖):
- 损坏记录异常
- 英寸有效元数据异常
- NotEnoughReplicasAfterAppendException
- NotEnoughReplicasException
- OffsetOutOfRangeException
- 超时异常
- 未知主题或分区异常
完全关闭 Kafka 看起来像是一个不可重试的异常。
推荐阅读
- python - 在 PySimpleGUI 中确定字符串宽度
- html - 使用“使用实时服务器打开”调试网页时无法加载图片和音频
- php - PHP C联系表格
- google-identity - 如何实现谷歌智能锁一键登录
- html - 画布在浏览器上不可见(使用原子文本编辑器)
- doctrine-orm - 无法更新 Laminas 项目中的教义-orm-module 3
- python - 具有一个颜色定义值的 Python skimage 图像
- javascript - First 返回值后执行第二个函数
- python - 如果满足条件,使递归函数退出?
- javascript - 如何在 atom 中运行 js?保存文件时出现 bash 错误