如何恢复kafka数据

时间:2018-07-17 14:48:28

标签: docker apache-kafka apache-zookeeper

我有一个单节点群集kafka设置。

docker-compose文件是这样的:

version: '2'

services:
  zookeeper:
    image: zookeeper:3.4.9
    hostname: zookeeper
    ports:
      - "2181:2181"
    environment:
        ZOO_MY_ID: 1
        ZOO_PORT: 2181
        ZOO_SERVERS: server.1=zookeeper:2888:3888
    volumes:
      - zookeeper-data:/var/lib/zookeeper/data
      - zookeeper-log:/var/lib/zookeeper/log


  broker:
    image: confluentinc/cp-kafka:4.1.1
    hostname: broker
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://dev.kafka.org:9092"
      KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"
      KAFKA_BROKER_ID: 1
      KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_DELETE_TOPIC_ENABLE: "true"
      KAFKA_LOG_RETENTION_HOURS: 1680
      KAFKA_JMX_PORT: 7071
    volumes:
      - kafka-data:/var/lib/kafka/data
    depends_on:
      - zookeeper

由于某种原因,我不得不重新启动整个kafka堆栈。重新启动后,我发现主题丢失了。

似乎Zookeeper数据记录的命名卷不正确。

如果zookeeper数据丢失并且kafka卷数据可用,是否可以恢复主题数据?

1 个答案:

答案 0 :(得分:0)

不是。丢失zookeeper就像是您的inode表在文件系统上损坏了。您可能有一些方法可以在Zookeeper中手动重建数据,但这种方法极不可能起作用。这就是为什么人们将Zookeeper作为高度可用的分布式系统运行的原因,因为将存储在其中的数据保存在其中非常重要。