【问题标题】:Database connection lost when reading from Kafka从 Kafka 读取时数据库连接丢失
【发布时间】:2018-07-13 20:58:33
【问题描述】:

我是 Spring Kafka 的新手,我一般会说 Kafka。但我正在尝试使用 Kafka 主题,然后使用接收到的事件填充数据库,所以我们有这个:

Kafka 主题 -> 应用程序侦听器 -> 数据库。

所以我想知道当与数据库的连接由于某种原因而丢失时,该怎么办?所以这个:

Kafka 主题 -> 应用程序侦听器(读取一个对象)X 数据库。

我的一个建议是停止列表器,然后在数据库恢复时以某种方式重新打开它。另外,我们已经从主题中读取的元素会发生什么?

数据集非常大,所以从头开始读取并不是一个真正的选择。

另外,我不拥有 Kafka 生产者。我只是一个使用外部资源的消费者。

有什么建议吗?

【问题讨论】:

  • 哪个数据库?您熟悉 Kafka Connect 框架吗?
  • 我不是。我会看看它。谢谢

标签: spring-boot apache-kafka kafka-consumer-api spring-kafka


【解决方案1】:

与数据库的连接丢失时的处理方法是什么

您不应该在您的消费者代码中使用自动提交。

简短的回答是,如果您不提交到数据库,则不应将消耗的偏移量提交回 Kafka。这样,在重试的情况下,您可以在主题的 Kafka 保留期限内将数据推送到数据库中。

这种类型的“数据库重播”的常见模式使用压缩的 Kafka 主题,在该主题中,您可以保证保留每个唯一 Kafka 消息键的最新值。

【讨论】:

  • 我们可以停止并启动 kafka 监听器吗?我需要我们可以控制它吗?只是我的怀疑@cricket_007
  • 这只是我脑海中闪过的想法,因为我不知道如何解决这个问题。
  • 您应该阅读有关消费者组在 Kafka 中的工作方式。如果您重新启动具有相同组 id 的进程,它将仅从该偏移量开始,而不是主题的开头。如果您让代码自动提交偏移量,那么您可能会因为各种原因导致消息无法到达数据库,而不仅仅是数据库关闭
猜你喜欢
  • 2021-05-25
  • 2020-06-15
  • 2018-02-10
  • 1970-01-01
  • 2020-11-12
  • 2013-04-27
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多