Erlang 编写 Kafka 客户端之最简单入门
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:
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 请参考我的其他文章:
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 客户端之最简单入门的更多相关文章
- BAT脚本编写教程简单入门篇
BAT脚本编写教程简单入门篇 批处理文件最常用的几个命令: echo表示显示此命令后的字符 echo on 表示在此语句后所有运行的命令都显示命令行本身 echo off 表示在此语句后所有运行的命 ...
- 《KAFKA官方文档》入门指南(转)
1.入门指南 1.1简介 Apache的Kafka™是一个分布式流平台(a distributed streaming platform).这到底意味着什么? 我们认为,一个流处理平台应该具有三个关键 ...
- 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...
- 一文彻底理解Redis序列化协议,你也可以编写Redis客户端
前提 最近学习Netty的时候想做一个基于Redis服务协议的编码解码模块,过程中顺便阅读了Redis服务序列化协议RESP,结合自己的理解对文档进行了翻译并且简单实现了RESP基于Java语言的解析 ...
- MacOS SVN简单入门
背景:MacOS内置了SVN的客户端和服务器端的软件,下边所使用到的目录需要结合自己电脑的具体情况进行设置,并不是很困难. MacOS SVN简单入门 第一部分,创建本地的SVN测试仓库,并修改相应的 ...
- Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门
说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...
- 简单入门使用GitHub总结
简单入门使用GitHub总结 ps: 试着自己弄一下GitHub,发现问题多多,中间还差点把自己的资料给全部弄没了(直接摔啦~). 然后网上查找各种资料进行设置终于成功了. 以下是参考的资料链接: G ...
- GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...
- Java中Redis简单入门
Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案. Redis官方网网站是:http://www.redis.io/,如下: Redis ...
随机推荐
- Cassandra 3.x官方文档(1)---关于Cassandra
写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...
- Windows 8 Cython 的配置(解决Unable to find vcvarsall.bat问题)
关键是安装之前配置编译器. 1.下载MinGW 编译器 http://www.mingw.org/download.shtml 2.把编译器路径(例如C:\Program Files (x86)\Co ...
- Android应用UI设计流程
Android应用UI设计流程 设计原理 1.在移动设计中,使用环境是最关键的因素.原型设计方法必须考虑尺寸因素 2.用户测试必须涵盖运动.声音和多点触控等方面: 进行移动设计和测试时,请将你知道的有 ...
- Swift基础之守卫语句guard
本篇文章翻译自:http://ericcerney.com/swift-guard-statement/原作者:ecerney该语法为swift2.0之后添加的新特性 最开始在Apple的Platfo ...
- Android简易实战教程--第十九话《手把手教您监听EditText文本变化,实现抖动和震动的效果》
昨晚写博客太仓促,代码结构有问题,早上测试发现没法监听文本变化!今日更改一下.真心见谅啦,哈哈!主活动的代码已经改好了,看截图这次的确实现了文本监听变化情况. 监听文本输入情况,仅仅限于土司略显low ...
- 安卓程序员要拿到5000和1w的薪资,分别需要掌握哪些技术?
这个是我在逛知乎的时候发现的一个帖子,在这里小小的整理了一下,收集了一些评论,然后我分享出来,希望对自己还有同行有所帮助. 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 链接 ...
- 为何不能在viewDidLoad方法中显示其他视图
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 你可以使得当视图控制器(view controller)显示自 ...
- FFmpeg源代码简单分析:av_write_frame()
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
- Windows平台下的多线程编程
线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件.信号标识及动态分配的内存等.一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度 ...
- Android开发学习之路--NDK、JNI之初体验
好久没有更新博客了,最近一直在看一个仿微信项目,然后看源码并自己实现下,相信经过这个项目可以让自己了解一个项目中的代码以及种种需要注意的事项.不知不觉中博客已经快要40w访问量,而且排名也即将突破30 ...