按照kafka的官方文档(http://kafka.apache.org/documentation.html#quickstart)试了一下,解压程序包后运行
$bin/zookeeper-server-start.sh config/zookeeper.properties &
结果一上来就报错,无法分配内存。
从错误输出来看,这个zookeeper-server要求申请536870912字节(512MB)内存 =。=#。。 日了狗了我的亚马逊主机总共才1GB物理内存而且还没建swap分区,free看了一下大概就剩200MB左右的可用内存。检查这个命令的两个文件,发现在zookeeper-server-start.sh中有个定义export KAFKA_HEAP_OPTS=”-Xmx512M -Xms512M”。上来就要jvm去申请512MB的最小空间,把这个Xms改成16M后zookeeper就启动正常了。
然后做下一步启动kafka-esrver
$bin/kafka-server-start.sh config/server.properties &
同样遇到这个问题,修改kafka-server-start.sh中的Xms配置(这个更狠,要了1GB的初始内存)
重新启动kafka-server,这回又显示如下错误:OutOfMemoryError
这回是jvm已经启动,在kafka的程序内部分配内存时候出错了。看来除了在启动jvm前就申请了大内存,在kafka程序内部又申请了大内存。
先去检查作为启动参数的server.properties文件,里面关于size的配置都不大,不至于OutOfMemory。
再检查kafka的源码,定位到KafkaServer.scala的589行附近。
kafka在创建LogManager对象的时候,使用了这个cleanerConfig,并且用到了几个关于size的配置,而且这几个配置没有出现在server.properties文件中,估计使用了默认值。
再kafka的官方文档可以查到这个logCleanerDedupeBufferSize默认134217728字节,128MB了。估计就是这个造成OutOfMemory了。
在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内存,看来大数据的前提就是要有大内存=。=#
我也想搞个抓比赛数据,分析的程序。能不能交流一下
上来就要jvm去申请512MB的最小空间,(这个更狠,要了1GB的初始内存)
同样想因为机器内存小而关注到这个问题,看到上面两句话觉得很搞笑hhhh🤣🤣
thanks