首页 > 解决方案 > 如何检查 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

先感谢您。

标签: ruby-on-railsrubyapache-kafkakafka-producer-apiruby-kafka

解决方案


重试基于生产者回调抛出的异常类型。根据回调文档,回调期间可能发生以下异常:

处理此记录期间引发的异常。如果没有发生错误,则为 Null。可能抛出的异常包括:

不可重试异常(致命,永远不会发送消息):

  • 无效主题异常
  • OffsetMetadataTooLargeException
  • RecordBatchTooLargeException
  • 记录太大异常
  • 未知服务器异常

可重试异常(瞬态,可以通过增加#.retries 来覆盖):

  • 损坏记录异常
  • 英寸有效元数据异常
  • NotEnoughReplicasAfterAppendException
  • NotEnoughReplicasException
  • OffsetOutOfRangeException
  • 超时异常
  • 未知主题或分区异常

完全关闭 Kafka 看起来像是一个不可重试的异常。


推荐阅读