この質問はSpringKafkaに関するもので、 Apache Kafka with High Level Consumer:Skip破損したメッセージ
読み取り/処理できない(破損している)レコードをスキップするようにSpring Kafkaコンシューマーを構成する方法はありますか?
デシリアライズできない場合、コンシューマーが同じレコードでスタックする状況が発生しています。これは、コンシューマーがスローするエラーです。
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of Java.time.LocalDate: no long/Long-argument constructor/factory method to deserialize from Number value
コンシューマーはトピックをポーリングし、プログラムが強制終了されるまでループ内で同じエラーを出力し続けます。
次のコンシューマーファクトリ構成を持つ@KafkaListenerでは、
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);
ErrorHandlingDeserializer
が必要です: https://docs.spring.io/spring-kafka/docs/2.2.0.RELEASE/reference/html/_reference.html#error-handling-deserializer ==
そこに移動できない場合は2.2
バージョン、独自の実装を検討し、適切に逆シリアル化できないレコードに対してnull
を返します。