开发者社区> 问答> 正文

kafka宕机之后数据没有重新produce到kafka

环境信息

canal version canal.deployer-1.1.3-SNAPSHOT mysql version mysql Ver 14.14 Distrib 5.5.39, for Linux (x86_64) using readline 5.1

问题描述

正常情况下,canal能接收到binlog然后produce到kafka,但是如果kafka挂掉之后,直到重启的这段时间内,接收到的binlog没办法produce到kafka,这个是我配置的有问题吗?

原提问者GitHub用户zhang-bin

展开
收起
古拉古拉 2023-05-08 15:14:15 123 0
2 条回答
写回答
取消 提交回答
  • kafka crash之后恢复,binlog没有办法正常投递?

    原回答者GitHub用户agapple

    2023-05-09 18:07:56
    赞同 展开评论 打赏
  • 这种情况很可能是由于 Canal 的 offset 没有被正确的记录所导致的。在 Canal 中,offset 是用来标记 Kafka 中数据消费的位置的。当 Kafka 发生宕机等异常情况时,如果 offset 没有被正确的记录,就会导致 Canal 不能正确的恢复数据的消费位置,从而无法将数据再次 produce 到 Kafka 中。

    为了解决这个问题,可以通过两种方式来避免 Canal offset 丢失的情况:

    使用 Kafka 高级别 API 自动维护 offset。这种方式需要在 Canal 与 Kafka 的配置文件中进行相关的修改,配置文件中需要指定 Kafka 的 Broker 地址和 Topic 名称,以及使用何种方式来维护 offset(如使用 group.id、auto.offset.reset 等参数)。

    使用 ZooKeeper 来协调 Canal 和 Kafka 之间的 offset。这种方式下,Canal 会将 offset 信息记录到 ZooKeeper 上,Kafka 在启动时会先从 ZooKeeper 获取 offset 信息,然后再从对应的位置开始消费数据。这种方式需要在 Canal 和 Kafka 的配置文件中进行相关的修改,配置文件中需要指定 ZooKeeper 的地址和 Kafka 的 Topic 名称等信息。

    2023-05-08 15:59:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第16讲】:Spring Boot 2.0 实战Apache Kafka百万级高并发消息中间件与原理解析 立即下载
MaxCompute技术公开课第四季 之 如何将Kafka数据同步至MaxCompute 立即下载
消息队列kafka介绍 立即下载