有没有办法阻止自定义Kafka反序列化器的无限重试?

时间:2016-07-28 19:56:37

标签: apache-kafka

我使用自定义Kafka反序列化器来编组来自JSON的对象。

val props = Map(
  "bootstrap.servers" -> kafkaQueue.kafkaHost,
  "group.id" -> adapterServer.adapterConfig.kafkaGroup,
  "enable.auto.commit" -> "false",
  "max.poll.records" -> "1",
  "auto.offset.reset" -> "earliest",
  "auto.commit.interval.ms" -> "1000",
  "key.deserializer" -> "org.apache.kafka.common.serialization.ByteArrayDeserializer",
  "value.deserializer" -> "com.mystuff.CustomJSONDeserializer"
)
new KafkaConsumer[Array[Byte], MyMessage](props)

我曾经看到的一件事是,如果有人向主题发布了错误的JSON,Kafka会尝试使用我的自定义反序列化器对其进行反序列化 - 而且不能。 CustomJSONDeserializer抛出一个异常,但Kafka一直在尝试。

所以它只是无限地试图重新反序列化坏的JSON,实质上是卡住了。由于这一切都发生在卡夫卡内部,我不知道如何阻止它并告诉它继续下一条消息。

我该如何避免这种情况?

1 个答案:

答案 0 :(得分:0)

如果您发现异常,您的应用程序可以搜索受影响的消息以避免它。实际上0.10.0.0消费者的错误是masking deserialization errors,所以我不确定早期版本是否正确传播了异常。在即将发布的0.10.0.1版本中,我们至少会记录有关导致错误的消息的主题,分区和偏移量的信息。