收藏官网首页
查看: 7407|回复: 2

云平台搭建Kafka分布式消息队列服务

36

主题

69

帖子

265

积分

中级会员

Rank: 3Rank: 3

积分
265
跳转到指定楼层
楼主
发表于 2016-2-18 14:36:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
汉枫LPB120模块
本帖最后由 feel 于 2016-2-18 14:56 编辑

Kafka是开源的分布式、可拓展高可用日志服务,常用于分布式队列服务。基于Kafka的producer/consumer模型,用户可以按topic发布消息,通过partition保留多份数据保证即使有节点故障也不会丢数据,更重要的是即使消息量巨大也可以通过添加服务器水平拓展。

Kafka的源代码可以在Github获得,搭建分布式集群的步骤也比较简单,如果希望快速体验的话可以使用Docker容器技术。

快速启动Kafka

由于Kafka服务依赖ZooKeeper,我们可以起两个容器来搭建服务,也可以起一个all in one的容器,这会同时暴露ZooKeeper和Kafka的端口。

docker run -d –net=host spotify/kafka

我们可以docker exec进入容器执行kafka命令,也可以下载编译好的kafka命令来测试。

./bin/kafka-console-producer.sh –broker-list 127.0.0.1:9092 –topic test

./bin/kafka-console-consumer.sh –zookeeper 127.0.0.1:2181 –topic test

这是Spotify提供的Kafka容器镜像,详细信息可参考 https://hub.docker.com/r/spotify/kafka/

准备分布式环境

如果想搭建分布式集群,我们需要多台物理机或虚拟机环境,为了简化搭建过程,我们将使用公有云服务。

首先是创建Linux虚拟机,建议使用Ubuntu 15.04系统。

[

由于“已知原因”安装Java和Kafka需要从国外下载文件,配置时间很长,我们建议搭建好kafka-master后通过虚拟机快照的方式简化安装步骤,创建快照也很简单。

搭建Kafka服务

Kafka是Scala实现的分布式服务,Scala需要运行在JVM环境,因此需要提前安装Java,建议使用Oracle Java7,安装步骤通过以下命令即可完成。

apt-get purge -y openjdk*

add-apt-repository -y ppa:webupd8team/java

apt-get update -y

apt-get install -y oracle-java7-installer


export JAVA_HOME=/usr/lib/jvm/java-7-oracle/

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=.JAVA_HOME/lib/dt.jarJAVA_HOME/lib/tools.jar

export PATH=$PATHJAVA_HOME/bin

安装好Java后,可以安装编译好的ZooKeeper,如果通过源码编译还需要安装Maven等环境。

wget http://mirrors.hust.edu.cn/apach ... keeper-3.4.7.tar.gz

tar xzvf zookeeper-3.4.7.tar.gz

mv zookeeper-3.4.7 /usr/lib/zookeeper

我们可以通过下载的Jar包启动ZooKeeper,也可以直接使用Kafka压缩包里自带的ZooKeeper工具,安装Kafka的过程类似。

wget http://mirrors.noc.im/apache/kafka/0.8.2.0/kafka_2.10-0.8.2.0.tgz

tar xzvf kafka_2.10-0.8.2.0.tgz

mv kafka_2.10-0.8.2.0 /usr/lib/kafka

接着启动ZooKeeper和Kafka服务。

cd /usr/lib/kafka

./bin/zookeeper-server-start.sh ./config/zookeeper.properties

启动单机版Kafka服务。

cd /usr/lib/kafka

bin/kafka-server-start.sh config/server.properties

添加分布式Broker

为了实现消息多备份分布在不同节点,或者在单机存在瓶颈时我们可以轻易地拓展Broker。

基于OpenStack强大的快照功能,我们可以先对kafka-master打快照,然后创建基于次快照的虚拟机,这样就不需要重新安装Java、Kafka了,只需修改Kafka的server.properties配置文件。

broker.id=1

zookeeper.connect=192.168.0.2:2181

这里需要修改zookeeper.connect为ZooKeeper的启动地址,也就是kafka-master的IP地址,无论消息量有多大也可以通过添加broker来解决。

注意如果部署期间Java进程找不到主机名,可以修改/etc/hosts添加主机名对应的IP为127.0.0.1。

测试集群

bin/kafka-topics.sh –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic test

bin/kafka-topics.sh –list –zookeeper localhost:2181

# producer

bin/kafka-console-producer.sh –broker-list localhost:9092 –topic test


# consumer

bin/kafka-console-consumer.sh –zookeeper localhost:2181 –topic test –from-beginning

在两个终端启动producer和consumer,就可以实现类似聊天室的功能,更多高级用法可参考官方文档http://kafka.apache.org/documentation.html#gettingStarted

总结

Kafka是业界非常重要的分布式消息队列服务,目前已经大规模在LinkedIn、Yahoo、Netflix、Twitter等生产环境,基于此文大家也可以在云平台快速搭建自己的消息队列服务。
paulsmile 该用户已被删除
沙发
发表于 2016-2-18 14:46:13 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

36

主题

69

帖子

265

积分

中级会员

Rank: 3Rank: 3

积分
265
板凳
 楼主| 发表于 2016-2-18 14:55:44 | 只看该作者
paulsmile 发表于 2016-2-18 14:46
kafka与rabbitmq有什么不同的地方,哪个并发量大?各自的应用场景是什么?

kafka 天生为分布式消息系统而生,支持高并发,高吞吐量支持PB级别的数据量。以日志的方式进行持久化到磁盘,可重复消费数据。主要应用场景更多是用户行为日志数据,订单数据。属于轻量级应用。而rabbitmq 更多的是企业级应用,比较笨重。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表