Storm中,如何将偏移量迁移到Kafka中存储?

In Storm, how to migrate offsets to store in Kafka?

我一直遇到与 Kafka 和偏移量相关的各种不稳定问题。诸如工作人员在启动时崩溃并出现与无效偏移相关的异常之类的事情,以及其他我不明白的事情。

我读到建议将偏移量迁移到 Kafka 而不是 Zookeeper 中。我在 Kafka 文档中找到了以下内容:

Migrating offsets from ZooKeeper to Kafka Kafka consumers in earlier releases store their offsets by default in ZooKeeper. It is possible to migrate these consumers to commit offsets into Kafka by following these steps: 1. Set offsets.storage=kafka and dual.commit.enabled=true in your consumer config. 2. Do a rolling bounce of your consumers and then verify that your consumers are healthy. 3. Set dual.commit.enabled=false in your consumer config. 4. Do a rolling bounce of your consumers and then verify that your consumers are healthy.

A roll-back (i.e., migrating from Kafka back to ZooKeeper) can also be performed using the above steps if you set offsets.storage=zookeeper.

http://kafka.apache.org/documentation.html#offsetmigration

但是,我还是不明白这是要我做什么。我在配置偏移量存储位置的拓扑配置中看不到任何地方。它是否埋在集群 yaml 中?

关于在 Kafka 而不是 Zookeeper 中存储偏移量是否是一个好主意的任何建议?我该如何执行此更改?

在撰写本文时,Storm 的 Kafka spout(请参阅 https://github.com/apache/storm/tree/master/external/storm-kafka 处的 documentation/README)仅支持在 ZooKeeper 中管理消费者偏移量。也就是说,所有当前的 Storm 版本(直到 0.9.x 并包括 0.10.0 Beta)仍然依赖 ZooKeeper 来存储此类偏移量。因此,您不应执行上面提到的 ZK->Kafka 偏移量迁移,因为 Storm 尚不兼容。

您需要等到 Storm 项目——具体来说,它的 Kafka spout——支持通过 Kafka(而不是 ZooKeeper)管理消费者补偿。是的,一般来说,最好将消费者偏移量存储在 Kafka 而不是 ZooKeeper 中,但是可惜 Storm 还没有。

2016 年 11 月更新: 与此同时,Storm 的情况有所改善。现在有一个新的第二个 Kafka spout,它基于 Kafka 新的 0.10 消费者客户端,它在 Kafka 中存储消费者偏移量(而不是在 ZooKeeper 中):https://github.com/apache/storm/tree/master/external/storm-kafka-client.

然而,在我写这篇文章的时候,storm-user 邮件列表中的用户仍然报告了几个问题(例如 Urgent help! kafka-spout stops fetching data after running for a while),所以我会使用这个新的 Kafka小心喷出,并且只有经过全面测试。