【发布时间】:2020-06-02 05:41:21
【问题描述】:
目前我正在使用 Apache Kafka 和 Erlang 作为流处理器语言进行数据管道项目(实际上,除了从年初开始学习语言和概念外,我之前没有使用 erlang 的经验)。要编写 Kafka 消费者,我们依赖坚如磐石的 brod 模块。
我明白,我必须编写一个主管回调模块,负责启动我的 brod_client 和我的 group_consumer 模块。
my_app
+-- my_sup
+-- brod_client
+-- my_group_consumer
我编写的这个 group_consumer 模块是 brod_group_subsriber_v2 行为的回调模块,它本身就是 gen_server 的回调模块。
my_group_consumer > brod_group_subscriber > gen_server
当我运行我的应用程序时,我的主管正在启动 brod_client,但不是我的消费者 erlang:whereis(my_group_consumer). 返回 undefined。只有在消息到达后,brod_group_consumer_v2 本身似乎才会初始化 my_group_consumer 并调用其消息处理函数。这种“惰性”初始化对我来说是有意义的,但与我所期望的不同,因为我将主管配置为明确地处理 my_group_consumer(而不是它的基本行为)。
因此,毕竟我不确定我是否完全理解行为,因此我是否正确使用了 brod 模块,因为我尝试从它们继承,就像我使用 Java 类继承和多态一样。
很难找到在主管中使用 brod 的示例,而不仅仅是在 shell 上用于演示目的。
编辑:我在这里使用 brod 作为情况/用例的示例,我希望大多数专业模块的实现从 mst 通用模块“继承”,这似乎并非如此,因此我无法正确使用像 brod 这样的模块。
有人能解释一下这些概念的区别吗?如果你想根据我的例子来解释它会很棒,如果你能用另一个例子或根本没有例子来解释它......也很好,提前谢谢。
【问题讨论】:
-
你最后的问题似乎与标题基本无关。
-
你是对的!我进行了编辑以明确说明,小消费者应该只是一个例子……我正在询问有关解释这些概念以及它们如何映射在一起的建议。
标签: apache-kafka erlang kafka-consumer-api behavior erlang-supervisor