kafka填坑

最近在学习使用kafka来做消息队列,在整个学习过程中遇到了超级多的坑,所以一个一个填了之后记录下来对以后开发速度有更大的提升!

坑一:云服务器端口放开

众所周知,kafka的服务建立在zookeeper服务之上.那么至少就有两个端口需要在云服务器上放开,包括2181和9092端口,如果不放开这两个端口,在本地是无法访问kafka的.

坑二:Cannot allocate memory

没有看错,不能分配内存了!我可怜的服务器内存只有1个G,单核.(一年还要我900块.= =).我就起了一个tomcat和mysql服务器.就显示内存不够了,因为kafka也是基于java来提供服务的,所以也需要内存.这个时候可以打开kafka的bin目录下kafka-server-start.sh文件修改 export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" 为 export KAFKA_HEAP_OPTS="-Xmx256M -Xms128M".但是在我做集群测试时,刚启动第三个节点时就GG了.所有还是要多花点钱这个2G的???

坑三:server.properties配置

如果这个配置文件错误,我们也不能得到我么希望的结果.在kafka的kafka_2.10-0.10.1.1版本下配置文件内容为

broker.id=2
port=9092
host.name=127.0.0.1
log.dirs=/opt/kafka_2.10-0.10.1.1/logs2
zookeeper.connect=localhost:2181
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://[你的云主机外网ip]:9092

broker.id 和分区id 如果有多个节点,那么每个节点的分区id不同,且为正数;

port为当前节点的端口.

host.name本机

log.dir为数据保存文件夹地址

zookeeper.connect本机地址

listenners和advertised.listeners必配项(所有配置中的9092都和节点端口一样,如果新增一个节点端口为9093那么listenners和advertised.listeners配置中的端口号也要变成9093)

坑四:分区策略

这个坑可以参考这里

给出一个正确的做法是在kafka Producer传值时给出一个KeyMessage

producer.send(new KeyedMessage(topic,String.valueOf(i),"message: " + i)); 

 

你可能感兴趣的:(中间件)