使用Erlang / ekaf向Kafka生成数据时出错

时间:2016-11-17 13:26:28

标签: erlang apache-kafka

我尝试连接Kafka并使用Erlang / ekaf生成一些消息。

代码是ekaf的自述文件中解释的一个简单示例,但会在调用application:start时退出。

请注意,我已使用gen_icmp:ping确保此计算机可以访问运行Kafka的服务器。

我还运行python脚本为这个Kafka生成一些随机消息并且它成功了,所以很可能在我的Erlang代码中有一些我遗漏的东西。 :)

来源:

-module(kafka).
-compile(export_all).


run_test() ->
    io:format("run_test: start.~n"),
    pingKafka(),

    try init_ekaf() of
        _ -> io:format("run_test: ok~n")
    catch 
        error:Msg -> io:format("run_test: error: ~p~n", [Msg]);
        throw:Msg -> io:format("run_test: throw: ~p~n", [Msg]);
        exit:Msg -> io:format("run_test: exit: ~p~n", [Msg])
    end.


init_ekaf() ->
    io:format("init_ekaf: start.~n"),

    application:load(ekaf),
    application:set_env(ekaf, ekaf_bootstrap_broker, {"kafka.dev", 9092}),
    ok = application:start(ekaf),
    io:format("init_ekaf: started.~n"),

    Topic = <<"foobar">>,
    ekaf:produce_sync(Topic, <<"some data">>),
    io:format("init_ekaf: message sent.~n"),
    ok.


pingKafka() ->
    Res = gen_icmp:ping("kafka.dev"),
    io:format("pingKafka: ~p.~n", [Res]),
    ok.

输出:

run_test: start.
pingKafka: [{ok,"kafka.dev",
                {192,168,0,51},
                {192,168,0,51},
                {12343,0,64,130},
                <<" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK">>}].
init_ekaf: start.
run_test: error: {badmatch,{error,{not_started,gproc}}}
run_test: end.

1 个答案:

答案 0 :(得分:1)

再次读取存储库中的现有测试后,我发现在启动ekaf之前还需要启动gproc应用程序。

通过添加:

application:start(gproc)

application:start(ekaf)之前,问题就解决了。

P.S:找到解决问题的另一种方法,即调用application:ensure_all_started(ekaf)而不是application:start(ekaf)。 如document中所述,ensure_all_started相当于对尚未为应用程序启动的所有依赖项重复调用start / 1,2