erlang大数据系统搭建 3.erlang生产者编写,kafka集群功能测试

1.编写生产者
erlang连接kafka使用三方库brod(https://github.com/klarna/brod)
下面是示例代码
%% API
-export([do/2, start/0, r_do/1]).
 
 
-define(IF(Boolean, True, False), case Boolean of true -> True; _ -> False end).
 
 
start() ->
    ok = brod:start(),
    List = [{"ip", 9092},{"ip", 9091},{"ip", 9093}],
    ok = brod:start_client(List, client1),
    ok = brod:start_producer(client1, <<"money">>, _ProducerConfig = []).
 
r_do(Num) ->
    do(0, Num).
 
 
do(Now, Max) when Now >= Max ->
    ok;
do(Key, Max) ->
    Topic = <<"money">>,
    Role = rand:uniform(5),
    Type = rand:uniform(900) + 100,
    Diff = ?IF(rand:uniform(2) =:= 1, -rand:uniform(10000), rand:uniform(10000)),
    Mijing = rand:uniform(100),
    Data =#{<<"pkey">>=>Key, <<"role">>=>Role, <<"type">>=>Type, <<"reason">>=>0,
        <<"num">>=>Diff,<<"mijing">> => Mijing,<<"time">>=>erlang:system_time(millisecond) div 1000
    },
    brod:produce_cb(client1,Topic,fun(_,MaxPart,_,_)->Key rem MaxPart end,Key,Data,fun(_,_)->ok end),
    io:format("produce_cb:~p~n", [jiffy:encode(Data)]),
    do(Key + 1, Max).

把ip改成自己kafka的ip地址即可

 
2.测试broker crash的情况
建议使用可视化工具KafkaTool( https://www.kafkatool.com/),可以查看kafka各个broker的情况
连接上一节建立的三个zookeeper的client port,完成后如下图
这时尝试让一个broker crash,然后在启动crash的broker,看看能不能恢复
这时要注意,不能使用bin里的脚本正常关闭
正常关闭会把集群内的所有broker全部关闭
 
使用 ps -ef | grep kafka 找到要操作的broker的进程ID
kill -9 ID
此时会发现,9093的kafka broker消失了,重新启动此broker恢复正常
 
3.建立topic
可以直接用KafkaTool建立topic
其中有两个重要的参数
partition:由于一个partition同时只能被一个consumer线程消费,所以partition的数量,决定了消费消息的吞吐量。如果只有一个消费者,
                 那么partition就足够了。
replica:replica表示 每个 partition 在集群中的数量,为了防止某个zookeeper节点崩溃数据丢失,可以设置每个partition在集群中存储多份,
              但不能大于zookeeper节点数量,最保险的做法是每个zookeeper都有一份partition,这样只要有一台zookeeper节点存在,数据就
              不会丢失,但是这样同步数据的代价会很大,可以根据自己实际需要来调整。
 
4.测试zookeeper crash的情况
首先用producer生产10条数据
 
查询到zookeeper2是leader,ps -ef | grep zookeeper2 查询到进程ID,kill进程
 
此时发现zookeeper3变成了新的leader
 
在生产10条数据,然后重新打开zookeeper2,发现crash期间生产的数据,同步到了zookeeper2中
 
5.总结
通过2和4的测试,验证了zookeeper和kafka集群的高可用性,下一节具体介绍flink的数据处理
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/feapoi/p/13188507.html
今日推荐