小内存运行kafka

小内存运行kafka

按照kafka的官方文档(http://kafka.apache.org/documentation.html#quickstart)试了一下,解压程序包后运行

结果一上来就报错,无法分配内存。

屏幕快照 2016-03-15 下午2.58.25

从错误输出来看,这个zookeeper-server要求申请536870912字节(512MB)内存 =。=#。。 日了狗了我的亚马逊主机总共才1GB物理内存而且还没建swap分区,free看了一下大概就剩200MB左右的可用内存。检查这个命令的两个文件,发现在zookeeper-server-start.sh中有个定义export KAFKA_HEAP_OPTS=”-Xmx512M -Xms512M”。上来就要jvm去申请512MB的最小空间,把这个Xms改成16M后zookeeper就启动正常了。

屏幕快照 2016-03-15 下午2.35.44

然后做下一步启动kafka-esrver

同样遇到这个问题,修改kafka-server-start.sh中的Xms配置(这个更狠,要了1GB的初始内存)

屏幕快照 2016-03-15 下午2.36.03

重新启动kafka-server,这回又显示如下错误:OutOfMemoryError

屏幕快照 2016-03-15 下午2.20.31

这回是jvm已经启动,在kafka的程序内部分配内存时候出错了。看来除了在启动jvm前就申请了大内存,在kafka程序内部又申请了大内存。

先去检查作为启动参数的server.properties文件,里面关于size的配置都不大,不至于OutOfMemory。

再检查kafka的源码,定位到KafkaServer.scala的589行附近。

屏幕快照 2016-03-15 下午3.22.53

kafka在创建LogManager对象的时候,使用了这个cleanerConfig,并且用到了几个关于size的配置,而且这几个配置没有出现在server.properties文件中,估计使用了默认值。

再kafka的官方文档可以查到这个logCleanerDedupeBufferSize默认134217728字节,128MB了。估计就是这个造成OutOfMemory了。

屏幕快照 2016-03-15 下午3.30.58

在server.properties文件中添加一行:log.cleaner.dedupe.buffer.size=10485760 设置成10MB。然后重新启动kafka-server。成功!嘿嘿。

跟着官方文档试了一遍,感觉Kafka没有RabbitMq好上手。=。=#

现在想在mybet项目中用上消息队列,将betspider与mybet两个数据库分离,betspider只负责爬数据,写自己的库的同时把比赛、赔率数据放到消息队列中,mybet作为consumer自己去取。然后还要有一个consumer负责取完赛数据,根据比赛结果在mybet的订单表中结算订单,个人感觉更倾向于使用RabbitMq。呃,复杂度越来越大。。。

 

PS:后来还是老老实实给我的亚马逊主机加了2GB的swap分区。。。因为发现spark也是一上来就要1G内存,看来大数据的前提就是要有大内存=。=#

One thought on “小内存运行kafka

发表评论

电子邮件地址不会被公开。 必填项已用*标注