首页 > 解决方案 > 在运行时接收端 solr 关闭时重试尝试而不丢失数据

问题描述

curl -X POST -H "Content-Type: application/json" --data '{
"name": "t1",
"config": {
"tasks.max": "1",
"value.converter": "org.apache.kafka.connect.json.JsonConverter",
"value.converter.schemas.enable": "false",
"key.converter.schemas.enable": "false",
"key.converter": "org.apache.kafka.connect.json.JsonConverter",
"connector.class": "com.github.jcustenborder.kafka.connect.solr.HttpSolrSinkConnector",
"topics": "TRAN",
"solr.queue.size": "100",
"solr.commit.within": "10",
"solr.url": "http://192.168.2.221:27052/solr/TRAN",
"errors.retry.delay.max.ms":"5000",
"errors.retry.timeout":"600000",
"errors.tolerance":"all",
"errors.log.enable":"true",
"errors.log.include.messages":"false",
"errors.deadletterqueue.topic.name":"DEAD_TRAN",
"errors.deadletterqueue.topic.replication.factor":"1",
"retry.backoff.ms":"1000",
"reconnect.backoff.ms":"5000",
"reconnect.backoff.max.ms":"600000"
}
}' http://localhost:8083/connectors

如果 solr 服务器在运行时关闭,则需要根据连接器配置的计数重试(没有任何数据丢失)。

就我而言,当连接器和 solr 都处于运行状态 [Active] 时,它可以正常工作。但是,虽然只有 solr 服务器已关闭,但在我传递给 solr 的数据导致数据丢失之前,没有重试过程。

错误信息如下所示 在此处输入图像描述

来自 Kafka 连接日志的连接器配置

在此处输入图像描述

标签: apache-kafkaapache-kafka-connect

解决方案


我刚刚检查了该特定连接器SinkTask的实现,它确实在方法中抛出了一个。RetriableExceptionput()

理论上,根据您的连接器配置,它应该阻塞 10 分钟 ( "errors.retry.timeout" : "600000")。如果您的 SolR 实例在 10 分钟内恢复,则在数据丢失方面应该没有任何问题。

如果您想完全阻止您的连接器,直到 solR 站起来,您是否尝试过设置"errors.retry.timeout" : "-1"

根据以下文档errors.retry.timeout

重新尝试失败操作的最大持续时间(以毫秒为单位)。默认值为 0,这意味着不会尝试重试。使用 -1 进行无限重试。

PS:恕我直言,如果由于某种原因单个消息永久失败其接收器操作(即:如果接收器拒绝操作),这可能会导致死锁情况。


推荐阅读