【发布时间】:2022-10-21 02:19:44
【问题描述】:
我会尽量简短;
我有一个使用 json 序列化的 kafka 连接集群,我们发布了一个带有 elasticsearchsinkconnector 类的 kafka 连接器,以从忽略键和模式的主题中收集数据。我们使用 confluent-5.5.0 和 elasticsearchsinkconnector 插件版本也是 5.5.0,但我也在本地使用 11.x 版本的 elasticsearchsinkconnector 插件进行了尝试。
我遇到的错误接收器连接器来自以及它发送到死信队列的消息非常奇怪。如果手头的错误是序列化错误,例如如果我尝试向我的主题发送一个简单的字符串“这是一条消息”并给出错误。容差:所有定义了死信队列主题它实际上将消息发送到dlq-topic,因为它不能序列化来自生产者的消息,这很好。
但是可以说我的弹性索引有一个字段“数字”,它的映射类型是严格的整数。当我生成包含 {"number": "this is not an integer"} 消息的日志没有问题到达代理时,它被 sinkconnector 消耗,但是当需要将文档实际索引到 elasticsearch 索引中时,它由于映射配置而引发 json 解析错误。
Kafka 连接器可以容忍错误,因此它可以正常工作,但我在死信队列中没有看到任何消息,json 文档 {"number": "this is not an integer"} 只是在空间中消失了。有没有办法让在客户端出现错误的消息写入死信队列?
我也尝试使用 elasticsearchsink 连接器插件版本 11.x 进行此操作。
【问题讨论】:
-
它会完全消失,还是在 Connect 工作器输出中记录了异常? AFAIK,DLQ 仅用于捕获 Connect API 内部的错误,而不是任何外部客户端异常。您可能需要查看 Elasticsearch 连接器的源代码以验证
-
是的,它确实在连接日志中记录了一个错误。通常它表示缺少字段或由于映射等原因无法解析对象。但通常这些日志不包括触发它的索引和/或文档。如果您在 dlq 中看不到损坏的消息,则很难调试问题。
标签: elasticsearch apache-kafka apache-kafka-connect