Erlang 编写 Kafka 客户端之最简单入门

费劲周折,终于测通了 erlang 向kafka 发送消息,使用了ekaf 库,参考:

An advanced but simple to use, Kafka producer written in Erlang

https://github.com/helpshift/ekaf

1 准备kafka客户端

准备2台机器,一台是ekaf运行的kafka客户端(192.168.191.2),一台是kafka服务端(zookeeper+kafka)(192.168.122.199)。我在开发机器 (192.168.191.2)上,安装ekaf。虽然ekaf的机器上不需要安装 kafka ,但是为了测试 kafka 命令行客户端是否可用,我还是安装了 kafka:

$ echo $KAFKA_HOME

/usr/local/apache/kafka_2.9.2-0.8.1.1

打开一个kafka客户端producer:

$ kafka-console-producer.sh --broker-list 192.168.122.199:9092 --sync --topic ekaf

2 准备kafka 服务端

kafka 服务端(broker)的安装参考我的文章,并且已经建立了 ekaf 这个topic:

zookeeper+kafka集群安装之一

zookeeper+kafka集群安装之二

kafka broker安装位置在:192.168.122.199:9092,配置文件 server.properties 部分内容如下:

broker.id=0
port=9092
host.name=192.168.122.199
advertised.host.name=192.168.122.199
advertised.port=9092
num.partitions=2
zookeeper.connect=192.168.122.199:2181,192.168.122.199:2182,192.168.122.199:2183

/etc/profile 配置包含:

export APACHE_HOME=/usr/local/apache
export KAFKA_HOME=$APACHE_HOME/kafka_2.9.2-0.8.1.1
export ZK1_HOME=$APACHE_HOME/zk-cluster/zk1/zookeeper-3.4.6
export ZK2_HOME=$APACHE_HOME/zk-cluster/zk2/zookeeper-3.4.6
export ZK3_HOME=$APACHE_HOME/zk-cluster/zk3/zookeeper-3.4.6

启动 zookeeper:

$ZK1_HOME/bin/zkServer.sh start
$ZK2_HOME/bin/zkServer.sh start
$ZK3_HOME/bin/zkServer.sh start

启动zookeeper后,稍微等一会(30秒)再启动kafka,否则出错:

$KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties &

启动kafka broker之后,启动一个consumer,监听消息队列:

$KAFKA_HOME/bin/kafka-console-consumer.sh --zookeeper 192.168.122.199:2181 --topic ekaf --from-beginning

此时在kafka客户端producer窗口里输入消息,er窗口中显示出来,证明消息队列已经准备好了。

3 kafka客户端开发

下面的操作都在kafka客户端(192.168.191.2)上进行。

1) 获取 ekaf

$ git clone https://github.com/helpshift/ekaf.git
$ cd ekaf

2) 编译 ekaf

$ rebar get-deps clean compile

如何安装和使用 rebar 请参考我的其他文章:

Erlang Rebar 使用指南之一:入门篇

3) 运行 ekaf

$ erl -pa './deps/gproc/ebin' -pa './deps/kafkamocker/ebin' -pa './ebin'
1> application:load(gproc).
ok
2> application:load(kafkamocker).
ok
3> application:load(ekaf).
ok
4> application:set_env(ekaf, ekaf_bootstrap_broker, {"192.168.122.199", 9092}).
ok
5> application:start(gproc).
ok
6> application:start(kafkamocker).
ok
7> application:start(ekaf).
ok
8> ekaf:produce_sync(<<"ekaf">>, <<"Hello Kafka">>).
{{sent,0,<0.67.0>},
 {produce_response,1,0,
                   [{topic,<<"ekaf">>,0,[{partition,0,0,0,[],[],0,[]}]}]}}
9> ekaf:produce_sync(<<"ekaf">>, <<"Hello Kafka 99">>).
{{sent,1,<0.196.0>},
 {produce_response,1,0,
                   [{topic,<<"ekaf">>,0,[{partition,0,0,0,[],[],0,[]}]}]}}
10> q().
ok

注意,application:set_env(ekaf, ekaf_bootstrap_broker, {"192.168.122.199", 9092}). 的配置要确保与kafka-console-producer.sh使用的一致。我就是一个使用了IP,一个使用了hostname,导致一直无法成功,浪费了几天时间。

Erlang 编写 Kafka 客户端之最简单入门的更多相关文章

  1. BAT脚本编写教程简单入门篇

    BAT脚本编写教程简单入门篇 批处理文件最常用的几个命令: echo表示显示此命令后的字符 echo on  表示在此语句后所有运行的命令都显示命令行本身 echo off 表示在此语句后所有运行的命 ...

  2. 《KAFKA官方文档》入门指南(转)

    1.入门指南 1.1简介 Apache的Kafka™是一个分布式流平台(a distributed streaming platform).这到底意味着什么? 我们认为,一个流处理平台应该具有三个关键 ...

  3. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

  4. 一文彻底理解Redis序列化协议,你也可以编写Redis客户端

    前提 最近学习Netty的时候想做一个基于Redis服务协议的编码解码模块,过程中顺便阅读了Redis服务序列化协议RESP,结合自己的理解对文档进行了翻译并且简单实现了RESP基于Java语言的解析 ...

  5. MacOS SVN简单入门

    背景:MacOS内置了SVN的客户端和服务器端的软件,下边所使用到的目录需要结合自己电脑的具体情况进行设置,并不是很困难. MacOS SVN简单入门 第一部分,创建本地的SVN测试仓库,并修改相应的 ...

  6. Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门

    说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...

  7. 简单入门使用GitHub总结

    简单入门使用GitHub总结 ps: 试着自己弄一下GitHub,发现问题多多,中间还差点把自己的资料给全部弄没了(直接摔啦~). 然后网上查找各种资料进行设置终于成功了. 以下是参考的资料链接: G ...

  8. GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...

  9. Java中Redis简单入门

    Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案. Redis官方网网站是:http://www.redis.io/,如下: Redis ...

随机推荐

  1. ECharts, PHP, MySQL, Ajax, JQuery 实现前后端数据可视化

    ECharts 下载js代码 工作原理浅析 在项目中引入ECharts 后台处理 数据库端MySQL PHP端 JQuery Ajax处理 ECharts 端处理 前端全部代码 演示结果 总结 最近要 ...

  2. 将树形递归转换为loop

    class Stack(object): def __init__(self,**kwargs): self.__dict__.update(kwargs) def __str__(self): re ...

  3. Android EditText在ScrollView中被输入法遮挡

    千言万语不如一张图来的实在,问题如下GIF图所示[输入框被输入法挡住了]: 为了不让底部的按钮随着输入法一起起来,我把windowSoftInputMode设置为adjustPan. <acti ...

  4. ListView之侧滑删除

    SwipeMenuListView 是一个为listview添加item侧滑菜单的开源库,项目地址:https://github.com/baoyongzhang/SwipeMenuListView ...

  5. GridView如何适配不同屏幕

    GridView和ListView一样,都是项目中常用的控件之一,那么本篇文章要讲的是GridView如何适应不同大小的屏幕,首先,我们来看一张效果图,如下: 每行为四个item,上下左右间距大概2d ...

  6. Google Dremel数据模型详解(上)

    首先简单介绍一下Dremel是什么,能解决什么问题.第二部分着重讲Dremel的数据模型,即数据结构.第三部分将谈一下在此数据结构上设计的算法. 1 起源 Dremel的数据模型起源于分布式系统的应用 ...

  7. 如何使用《DB 查询分析器》高效地生成旬报货运量数据

    如何使用<DB 查询分析器>高效地生成旬报货运量数据 马根峰                    (广东联合电子服务股份有限公司, 广州 510300) 1      引言   中国本土 ...

  8. Python模块探秘之smtplib,实现纯文本邮件的发送

    今天学到了如何使用Python的smtplib库发送邮件,中间也是遇到了各种各样的错误和困难,还好都一一的解决了.下面来谈一谈我的这段经历. 配置你的邮箱 为什么要配置邮箱呢?具体要配置什么呢? 因为 ...

  9. OpenCV实时美颜摄像并生成H264视频流

    为什么美颜摄像这么简单的功能,OpenCV这个开源项目网上很少有代码呢?对于在windows平台下,生成h264视频流也比价麻烦,没有现成的api可以使用,需要借助MinGw编译libx264,或者f ...

  10. msm8974 camera driver添加新摄像头kernel hal修改

    添加一款新摄像头流程 1添加sensor kernel driver, 主要实现上电.rst.pwd.mclk等power setting,sensor prob & sensor  i2c ...