【发布时间】:2019-01-23 06:26:26
【问题描述】:
我正在编写一个使用 Apache Storm v1.1.2、Kafka v0.11.0.1、Zookeeper 3.4.6、Eureka 和 Cloud-Config 的 dockerized Java Spring 应用程序,所有这些都在由 Docker-Compose 编排的 Docker 容器中。
我通过 KafkaSpout 接收的元组有一个“值”字段,它是一个 protobuf 对象。我使用自定义反序列化器将我的对象从中取出进行处理。
我有一个基本的应用程序工作,我有一个螺栓,它打印传入的消息并根据 protobuf 对象中字段的值将它们路由到其他特定的螺栓。我还将 LocalCluster、Config 和 TopologyBuilder 作为 Spring Bean 工作。
目前我在 PostContruct 中设置了所有螺栓,但我需要能够动态添加螺栓,以根据 protobuf 对象的其他字段过滤传入消息并执行基本聚合函数(最大/最小/窗口平均值)。
我想使用 REST 控制器来执行此操作,但是如何在不丢失数据的情况下停止和启动拓扑?我也不希望从一开始就通过监听 Kafka 主题来重新启动拓扑,因为该系统将收到极高的负载。
这篇文章看起来很有希望,但我绝对希望整个过程自动化,所以我不会进入 Zookeeper https://community.hortonworks.com/articles/550/unofficial-storm-and-kafka-best-practices-guide.html
如何在代码中编辑现有拓扑以动态添加新螺栓?
【问题讨论】:
标签: java spring docker apache-kafka apache-storm