【问题标题】:Retry Attempt without data loss when sink side solr is down during runtime在运行时接收端 solr 关闭时重试尝试而不丢失数据
【发布时间】:2020-11-28 13:10:48
【问题描述】:
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-kafka apache-kafka-connect


    【解决方案1】:

    我刚刚检查了that specific connectorSinkTask 实现,它确实在put() 方法中抛出了RetriableException

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

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

    根据errors.retry.timeoutdocumentation

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

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

    【讨论】:

    • Sample Config "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":"-1", "errors.tolerance":"all" }
    • - 我已经尝试过 "errors.retry.timeout" : "-1" 但仍然是相同的结果 - 简而言之,将数据生成到 solr 将有 4 个步骤 - 步骤 1 -> 转换过程 [ JsonConverter] - Step 2 -> 转换过程 [Transformation] - Step 3 -> Put() [Data to Solr]
    • - 如果在第 1 步和第 2 步之间发生任何错误,则任务将失败,也可以使用容差属性跳过它,这里只有 errors.retry.timeout 有效。 - 在第 3 步中,kafka 连接控制台中没有任何重试尝试日志,并且在收到 solr 连接被拒绝错误后,我接下来重新启动了 solr 实例......但仍然没有移动数据 solr。 - 重试尝试应该在 kafka-connect-solar 中实现 - Confluent 端应该在建议之前验证基本的东西[非常失望]
    • 当 SolR 实例关闭时,您能否确认连接器日志中出现了哪些异常?如果您的 put() 失败并返回 RetriableException,则使用此 errors.retry.timeout=-1 它将永远重试,并告诉 Connect 框架不要提交偏移量,因为下游接收器操作失败。
    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2021-04-19
    相关资源
    最近更新 更多