【问题标题】:Kafka topic no longer exists after restart重启后Kafka主题不再存在
【发布时间】:2015-12-02 06:19:10
【问题描述】:

我在本地 kafka 集群中创建了一个主题,其中包含 3 个服务器/代理 通过从我的 kafka 安装目录运行以下命令

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 2 --topic user-activity-tracking-pipeline

一切正常,因为我能够从我的主题中生成和消费者消息。重新启动机器后,我通过在终端中运行以下命令,从 kafka 安装目录开始捆绑 zookeeper

bin/zookeeper-server-start.sh config/zookeeper.properties

通过在终端中从kafka安装目录执行以下命令,启动了属于集群的3台服务器

env JMX_PORT=10001 bin/kafka-server-start.sh config/server1.properties
env JMX_PORT=10002 bin/kafka-server-start.sh config/server2.properties
env JMX_PORT=10003 bin/kafka-server-start.sh config/server3.properties

现在,当我通过在终端中从 kafka 安装目录运行以下命令来列出可用主题时,

bin/kafka-topics.sh --zookeeper localhost:2181 --list

结果为空!

这里是相关的服务器 1 配置条目。服务器 2 和服务器 3 的值非常相似

broker.id=1
listeners=PLAINTEXT://:9093
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs-broker-1
num.partitions=2
num.recovery.threads.per.data.dir=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.cleaner.enable=false
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000

我注意到重启后日志文件在下面,所以没有清理任何东西

/tmp/kafka-logs-broker-1
/tmp/kafka-logs-broker-2
/tmp/kafka-logs-broker-3

我想知道为什么我尝试列出之前创建的主题 “user-activity-tracking-pipeline” 不再存在?

【问题讨论】:

  • 你说重启机器后你开始使用 kafka 捆绑的 Zookeeper。你是如何第一次启动 Zookeeper 的?你是否也在使用 kafka 捆绑的 Zookeeper?
  • 是的,我在第一次尝试时以同样的方式启动了捆绑的 zoo keeper

标签: apache-kafka apache-zookeeper


【解决方案1】:

kafka-topics.sh 实际上在后台使用 zookeeper 数据来回答查询。基本原理是单个经纪人通常不能拥有足够的信息来完整地描述主题。

如果您在重启过程中丢失了(我怀疑您确实丢失了,因为您提到了新的 zookeeper 启动)zookeeper 数据,kafka-topics 现在完全失明,无法看到以前的 kafka 数据。

检查发生情况的最佳方法是在查询时实际执行 kafka 正在执行的操作!启动你的zookeeper客户端(就像./zkCli.sh一样简单,然后输入ls /brokers/topics。如果它是空的,你的ZK数据就会丢失。

【讨论】:

    【解决方案2】:

    我认为您遇到了每当您的计算机重新启动时都会清除 /tmp 目录的问题。您要么需要更改存储 Kafka 日志的目录,要么更改 /etc/default/rcS 中的 $TMPTIME 环境变量,该变量控制 tmp 文件的保留时间(以天为单位)。

    https://askubuntu.com/questions/20783/how-is-the-tmp-directory-cleaned-up

    【讨论】:

    • 感谢您的回答。我检查了我的 /tmp 目录,重启后文件存在,所以我的主题的日志文件还没有被删除。我认为我的问题的根本原因是别的。
    • 你的 Zookeeper 数据呢?它存储在 /tmp 中吗?重启后文件还在吗?
    • 在/tmp/zookeeper目录下也完好无损
    • 虚拟机也有同样的问题,奇怪
    【解决方案3】:

    这并不意味着如果您在 temp 上有代理目录就说明您有数据,如果这些目录不存在,代理往往会创建这些目录。

    • 能否尝试重新创建主题,重新启动机器,然后在启动 Kafka 之前查看 /tmp 目录?
    • 您能否尝试通过将数据目录更改为/tmp 以外的其他内容来重现?

    【讨论】:

    • 感谢您的帮助。我尝试了第一次,重新启动后,我发现我的 /tmp 目录的内容完好无损。我会检查第 2 项并让你知道 不过,这个问题是可重现的
    猜你喜欢
    • 1970-01-01
    • 2019-06-14
    • 2021-02-03
    • 2019-05-20
    • 2021-10-17
    • 2020-11-09
    • 2019-03-27
    • 2019-04-06
    • 2018-09-20
    相关资源
    最近更新 更多