apache-kafka - 在运行时接收端 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 连接日志的连接器配置
解决方案
我刚刚检查了该特定连接器SinkTask
的实现,它确实在方法中抛出了一个。RetriableException
put()
理论上,根据您的连接器配置,它应该阻塞 10 分钟 ( "errors.retry.timeout" : "600000"
)。如果您的 SolR 实例在 10 分钟内恢复,则在数据丢失方面应该没有任何问题。
如果您想完全阻止您的连接器,直到 solR 站起来,您是否尝试过设置"errors.retry.timeout" : "-1"
?
根据以下文档:errors.retry.timeout
重新尝试失败操作的最大持续时间(以毫秒为单位)。默认值为 0,这意味着不会尝试重试。使用 -1 进行无限重试。
PS:恕我直言,如果由于某种原因单个消息永久失败其接收器操作(即:如果接收器拒绝操作),这可能会导致死锁情况。
推荐阅读
- python - 为什么批次标准化会使我的批次如此异常?
- java - Delayed ExecutorService with manual start
- excel - VBA在excel中循环A列中的每个单元格
- javascript - 将数组的值推送到对象的值
- firebase - 重定向“源”中的查询参数是否仍然不允许?
- udp - 通过 UDP 从 ftp 下载文件但未呈现路径
- reactjs - 存储在 XSTATE 中以便跨组件访问?
- react-native - 使用滚动 Y 插值反应原生视图不透明度
- java - 如何在 Selenium JAVA 和 TestNG 中使用 log4j2x 在日志文件中打印“系统生成的日志”?
- javascript - 在哈希表上添加元素