【问题标题】:custom deserializer does not get called apache storm自定义反序列化器不会被称为 apachestorm
【发布时间】:2018-03-21 04:45:59
【问题描述】:

Storm 版本 - 1.0.6。

我为我的一个类注册了一个自定义序列化程序。正如预期的那样,它的 write 方法被调用并成功运行。但是,尽管在下游螺栓中调用了执行,但我的自定义序列化程序的读取方法根本没有被调用。 我正在本地集群中对此进行测试,始终尝试将序列化设置为 true。

我的猜测是,由于某种原因,storm 对我的自定义序列化不满意,并将元组原样传递到下游而不进行序列化。我在下游螺栓中看到的字段的指针值与发出的相同。

我没有看到任何警告或错误。我怎么知道在这种情况下出了什么问题?我知道我可以获取源代码并进行调试,但是还有其他任何人认为会有所帮助的提示吗?

【问题讨论】:

    标签: apache-storm apache-storm-topology


    【解决方案1】:

    我相信本地模式集群只测试序列化,不测试反序列化。当所有工作人员都在一个进程中运行时,没有理由对元组进行序列化和反序列化,因为它们没有通过网络。总是尝试序列化设置只会让 Storm 序列化元组以测试序列化是否有效,但元组不会在本地集群中以序列化形式传输。

    查看serialization check,其中检查是called,而deserialization 发生在非本地集群中。

    【讨论】:

    • 谢谢。即使拓扑在集群中运行但螺栓恰好在同一个工作人员中运行,是否也是这种情况?
    • 是的。看一下我链接的 ExecutorTransfer 类,它是处理执行器之间调度元组的代码。如果目标执行器是本地的(在同一个worker中),则没有理由序列化元组,因为它可以通过引用传递。
    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多