【问题标题】:Using Flink with thrift将 Flink 与 Thrift 一起使用
【发布时间】:2020-09-20 07:52:43
【问题描述】:

我在我的 flink 应用程序中看到一些关于我的节俭类的日志:

2020-06-01 14:31:28 INFO  TypeExtractor:1885 - Class class com.test.TestStruct contains custom serialization methods we do not call, so it cannot be used as a POJO type and must be processed as GenericType. Please read the Flink documentation on "Data Types & Serialization" for details of the effect on performance.

所以我按照这里的说明进行操作:

https://flink.apache.org/news/2020/04/15/flink-serialization-tuning-vol-1.html#apache-thrift-via-kryo

我这样做是为了 TestStruct 的节俭以及其中的所有节俭结构。 (虽然我跳过了命名类型)。

此外,生成的节俭代码是用 Java 编写的,而 flink 应用程序是使用 scala 编写的。

如何使该错误消失?因为我遇到了另一个错误,如果我通过我的 dataStream 转换为 TestStruct,则会丢失一些字段。我怀疑这是由于序列化问题造成的?

【问题讨论】:

    标签: apache-flink thrift


    【解决方案1】:

    实际上,到目前为止,您无法摆脱这个警告,但它也不是问题,原因如下:

    警告基本上只是说 Flink 的类型系统没有使用其任何内部序列化器,而是将类型视为“通用类型”,这意味着它是通过 Kryo 序列化的。如果您关注我的博客文章,这正是您想要的:使用 Kryo 通过 Thrift 进行序列化。您可以使用调试器在TBaseSerializer 中设置断点,以验证是否正在使用 Thrift。

    至于缺少的字段,我怀疑这发生在您的(平面)map 运算符中转换为您的TestStruct 期间,并且可能不会发生在用于将此结构传递给下一个运算符的序列化中。您应该验证这些字段丢失的位置 - 如果您有这个可重现的,您最喜欢的 IDE 的调试器中的断点应该可以帮助您找到原因。

    【讨论】:

    • 好的,我刚刚发现了我的错误。您绝对正确,它在 TestStruct 映射的创建范围内。我没有使用 scrooge,而是使用 vanilla thrift java codegen,而我的错误是....在我的TestStruct 中,当我设置属性时,我没有使用setter 方法,而是直接设置这些方法。在后台,这些setter 方法也在设置需要设置的位。更改我的代码以使用这些 setter 方法有效。
    猜你喜欢
    • 2012-10-04
    • 2017-07-31
    • 1970-01-01
    • 2014-04-20
    • 2015-05-06
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2019-06-17
    相关资源
    最近更新 更多