【问题标题】:Kafka message not getting consumed卡夫卡消息没有被消费
【发布时间】:2019-07-05 19:48:00
【问题描述】:

我有一个单独的 Kafka 节点 (v 0.10.2) 正在运行。我们已配置 log.retention.hours=480 但在消息到期时间之前消费者无法使用消息。(Ex 消息在 1 日推送7 月和我在 7 月 4 日启动了我的消费者。在启动消费者之前,我已经通过 yahoo Kafka 监控服务验证了消息是否存在。但是在启动消费者时,它会继续轮询并等待消息)。 下面提到的是代理配置:

broker.id=1
delete.topic.enable=true
num.network.threads=5
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=xxx
num.partitions=1
num.recovery.threads.per.data.dir=5
log.retention.hours=480
offsets.retention.minutes=43200
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=x.x.x.x:2181
zookeeper.connection.timeout.ms=30000
zookeeper.session.timeout.ms=30000

我已经用谷歌搜索了它,但无法找到原因。请让我知道为什么会发生这种情况以及如何解决它。

【问题讨论】:

  • 你能添加你的消费者配置吗?
  • 缺少消费者配置,即:auto.offset.reset=earliest 在启动消费者时从头开始读取,否则将从最新 = 启动消费者后发送的记录中读取
  • 您是否尝试过使用 kafka-console-consumer 进行消费验证?

标签: apache-kafka


【解决方案1】:

消息未被消费的原因有很多。以下是您可以调试的一些方法:

如前所述,您可能正在使用最新的偏移量,因此您将等待。在这种情况下,请尝试向主题生成消息并检查它们是否被消费。

接下来,确保您的消费者订阅了生成消息的分区。如果您使用的是 Streams API,则无需担心这一点,因为您将订阅所有分区。

可能存在一些消费者配置问题。尝试使用带有--from-beginning 标志的kafka-console-consumer 消费。 如果没有输出意味着消息可能不存在,或者您很难连接到它。 您可以在 Kafka 机器上和外部重复此测试。

检查您从消费者客户端到代理的连接,代理是您正在消费的主题分区的领导者。如果连接时出现问题,您一定会遇到异常(例如获取数据的超时)。 为此,您可以使用 telnet broker_ip:port

有时,您的引导服务器可能可以访问,但您的主题分区所在的其他代理可能无法访问。

检查您的 iptables 规则以查看代理端口是否被阻止。看 What happens if the leader is not dead but unable to receive messages in Kafka? SPoF?

【讨论】:

    猜你喜欢
    • 2020-07-24
    • 2018-11-07
    • 2017-05-11
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2020-03-14
    相关资源
    最近更新 更多