【问题标题】:Is there a relationship between Kafka Connect and Kafka Streams commit interval?Kafka Connect 和 Kafka Streams 提交间隔之间是否存在关系?
【发布时间】:2020-08-08 21:14:39
【问题描述】:

假设我们有一个 Kafka Sink 连接器从主题 TopicA 填充数据库,

还有一个 Kafka Stream 应用程序将更新推送到该 TopicA 主题。

我想知道是否:

  • Sink 连接器更新到数据库中的数据,以及

  • 执行这些更新的时刻

受 Kafka Streams App 提交间隔的影响,如果是,如何影响?

【问题讨论】:

    标签: apache-kafka apache-kafka-streams apache-kafka-connect


    【解决方案1】:
    • Kafka Stream App(是 Kafka 生产者和消费者
    • Kafka Sink 连接器(只是一个 Kafka 消费者)

    Kafka 生产者对 Kafka 消费者的提交间隔绝对没有影响。您只需要注意 Kafka 生产者不会比您的消费者更快,以避免消费者组滞后。如果消费者速度较慢,则可能会丢失数据。

    【讨论】:

    • 您能否解释一下这句话“您只需要注意 Kafka 生产者不会比您的消费者更快,以避免消费者组滞后。如果消费者速度慢,就有可能丢失数据。” ?
    • 产生消息的速度应该总是小于消费消息的速度@IskuskovAlexander
    • 一般来说,这并不完全正确。在这种情况下,我们可以看一下 Kafka,它充当了一个巨大的缓冲区,将生产者和消费者之间的时间敏感性要求解耦。生产者可以在消费者处理批量事件时实时编写事件,反之亦然。
    【解决方案2】:

    我会说它们确实是相关的。

    如果 Streams 生产者线程更频繁地提交,那么数据会更快地到达主题,因此 Connect Sink 将更快地提取数据,最终对数据库调用更多查询。反之亦然,吞吐量较低。

    但是,每个组件都可以单独调整。

    【讨论】:

    • 我问这个问题是因为我得到了奇怪的结果:我有一个包含 (task_id, status, error_message) 架构的任务主题。创建后,任务看起来像这样(task_id="xxx", status="processing", error_message="")。如果任务失败,则会发布类似这样的更新(task_id="xxx", status="done", error_message="bad error")。请注意,该主题已压缩。当我使用KTable 使用它时,一切正常。但是在我的数据库(Cassandra)中,有时它很好,有时我有这个(task_id="xxx", status="processing", error_message="bad error")
    • 请注意错误消息是如何更新的,但状态仍在处理中。我不知道从哪里开始解决这个问题。
    • 我什至怀疑我的总内存,所以我从8GB升级到16GB,但我仍然有随机结果。你可以看到我有多迷茫。
    • 我假设您使用的是 Datastax 连接接收器?即便如此,我看不出这与做任何特定的流工作有什么关系。您应该在流作业上启用调试日志记录
    • 确实我正在使用 Datastax 连接接收器。好的,我将检查调试日志。谢谢
    猜你喜欢
    • 1970-01-01
    • 2017-09-03
    • 2019-06-12
    • 1970-01-01
    • 2017-06-09
    • 2018-07-15
    • 1970-01-01
    • 2021-07-19
    • 2021-03-17
    相关资源
    最近更新 更多