kafka消费不了消息

问题描述

最近在折腾 Kafka 0.9.0.0 版本,发现了个头疼的问题。用旧版 API 的消费者能正常收消息,但新版 API 的消费者却啥也收不到。这是咋回事呢?

环境搭建

先说说我的环境。ZooKeeper 在 localhost:2181 上跑着,Kafka Broker 在 localhost:9092 上监听。然后,我用控制台生产者往 "test" 主题里发了几条消息,内容大概是这样的:

复制

yello
is this thing on?
let's try another
gimme more
旧版 API 消费者

用旧版 API 的消费者命令,消息收得明明白白:

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

新版 API 消费者

但新版 API 的消费者就不行了,命令是这样的:

bin/kafka-console-consumer.sh --new-consumer --topic test --from-beginning --bootstrap-server localhost:9092

结果啥消息也收不到。这是 Kafka 的 bug 还是我操作有问题?

解决方案

后来,好几个小伙伴都遇到了类似的问题,大家分享了一些解决办法:

  1. 删除 ZooKeeper 中的 /brokers 节点

    • 进入 ZooKeeper shell:

      bin/zookeeper-shell localhost:2181
    • 删除 /brokers 节点:

      rmr /brokers
    • 重启 Kafka 节点。虽然不知道为啥这样能行,但确实解决了问题。

  2. 调整配置参数

    • 检查 offsets.topic.replication.factor 配置,确保它不超过 broker 的数量。如果只有一个 broker,可以将这个值设为 1:

      offsets.topic.replication.factor=1
    • 修改 server.properties 文件后,重启 Kafka 和 ZooKeeper。

  3. 指定分区

    • 如果上述方法都不行,可以尝试指定分区:

      bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic --partition 0
    • 这样可以确保消费者从指定分区接收消息。

  4. 检查 broker 状态

    • 确保所有 broker 都在运行。如果有 broker 挂了,可能会导致某些分区不可用,从而影响消费者接收消息。

  5. 使用正确的命令参数

    • 使用 --bootstrap-server 时,确保提供的是 broker 的地址;使用 --zookeeper 时,确保提供的是 ZooKeeper 的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值