【问题标题】:Hazelcast Jet Kafka with not serializable event handlerHazelcast Jet Kafka,带有不可序列化的事件处理程序
【发布时间】:2020-11-22 09:30:32
【问题描述】:

我想在我的应用程序中使用 hazelcast-jet-kafka,因为在我的情况下,kafka 分区的数量是有限的。我如何理解 jet-kafka 并行性并不依赖于 kafka 分区,如果能找到有关 jet-kafka 如何实现 kafka 分区数量独立性的解释,那就太好了。

但我的问题是,当我的事件处理程序无法序列化时,我如何处理 jet 中的事件。 例如,我找到了一个解决方案 - 使用地图接收器并将本地事件侦听器添加到此地图, 但对我来说,这似乎是一个拐杖,因为我不需要将这些事件存储在地图中。在这种方案中可以将地图大小设置为零吗?

另外,我在文档中看到了一种新的接收器类型 - 可观察的,这似乎是我想要的,但可观察的侦听器不能只获取本地条目,对我来说,它不适合。

您能帮助找到正确的解决方案吗?或者 hazelcast-jet-kafka 在这种情况下不是一个好的选择?

【问题讨论】:

    标签: hazelcast-jet


    【解决方案1】:

    如果能找到关于 jet-kafka 如何实现 kafka 分区数量独立性的解释,那就太好了。

    一个 Jet 线程可以处理任意数量的分区,因此很容易实现这种独立性。 Jet 只是在所有 Kafka 连接器线程之间公平地分配所有分区。

    但我的问题是,当我的事件处理程序无法序列化时,我如何在 jet 中处理事件。

    Hazelcast Jet 不需要您的事件处理程序可序列化。如果您需要一个有状态的处理程序,您必须提供一个创建状态对象的函数。该函数必须是可序列化的,但状态不必是可序列化的。如果你只是想要一个无状态的映射函数,它必须是可序列化的,但通常没有问题。

    如果您收到一个错误,指出函数不可序列化,这可能是由于捕获比您在 lambda 中实际需要的状态更多的常见陷阱。在这种情况下,您应该显示您的代码。

    【讨论】:

    • 我可以问更多,要在创建函数中创建事件处理程序,我需要创建像 fjp 这样的 executionContext。但是我在应用程序中有许多具有不同业务逻辑和处理程序的主题,在我看来,没有为每个处理程序创建新的 fjp,因为现在我在应用程序中重用了一个 fjp。并且将所有主题合并到一个管道中也不太好 :thinking_face: 也许有更好的解决方案来解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    相关资源
    最近更新 更多