【发布时间】:2014-02-24 09:54:40
【问题描述】:
我的拓扑有问题。我试图解释工作流程...... 我有一个每 2 分钟发出约 500k 元组的源,这些元组必须由 spout 读取并像单个对象一样处理一次(我认为是 trident 中的一批)。 之后,螺栓/函数/还有什么?...必须附加时间戳并将元组保存到 Redis 中。
我尝试使用一个函数来实现一个 Trident 拓扑,该函数使用 Jedis 对象(Java 的 Redis 库)将所有元组保存到 Redis 到这个函数类中,但是当我部署时,我在这个对象上收到一个 NotSerializable 异常。
我的问题是。如何实现一个在 Redis 上写入这批元组的函数?在网上阅读我找不到任何从函数写入 Redis 的示例或任何使用 Trident 中的 State 对象的示例(可能我必须使用它...)
我的简单拓扑:
TridentTopology topology = new TridentTopology();
topology.newStream("myStream", new mySpout()).each(new Fields("field1", "field2"), new myFunction("redis_ip", "6379"));
提前致谢
【问题讨论】:
-
您的意思是,您正在尝试序列化 Jedis 实例?你不能那样做,你应该使用一个特殊的单例模式和 JedisPool (Jedis 真的不推荐,如果你失去连接,它会永远丢失,池解决了这个问题)。
-
好的,通过池我解决了 Jedis 序列化的问题,但我无法理解如何使用 trident 实现这样的拓扑(真正的问题是缺乏文档和类似示例)。今天我更改了基本 Storm 拓扑类型(没有 Trident)的拓扑,它运行良好,但不能保证像单个(以某种方式排序)批处理一样处理所有元组......
-
无论如何感谢您的提示,我一步一步开始看到解决方案! :-P
标签: redis apache-storm trident