我使用自定义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,实质上是卡住了。由于这一切都发生在卡夫卡内部,我不知道如何阻止它并告诉它继续下一条消息。
我该如何避免这种情况?
答案 0 :(得分:0)
如果您发现异常,您的应用程序可以搜索受影响的消息以避免它。实际上0.10.0.0消费者的错误是masking deserialization errors,所以我不确定早期版本是否正确传播了异常。在即将发布的0.10.0.1版本中,我们至少会记录有关导致错误的消息的主题,分区和偏移量的信息。