Kafka是Apache基金会的一个开源的,分布式事件流平台。主要用作分布式的发布/订阅框架的消息队列。现在被数千家公司用于高性能的数据管道、流分析、数据集成、关键任务应用(mission-critical applications)。
我们常常会遇到这样一种情形:服务A调用了另一项服务B,而当服务B发生问题时A也要跟着阻塞,即便B是否完成都不影响A的结果。这样就会造成性能的浪费,甚至于整个服务的崩溃,显然是不好的,我们开始思考如何解决这个问题。
可以发现,许多任务流程都可以拆分成一个个小的模块并异步的执行。而拆分就是微服务的思想。但仅仅是拆分,那么并不能起到异步的效果。我们回想一些具有异步处理能力的程序的共有特点:缓冲区。如果我们抽象出一个队列式的中间件,调用方将调用放置在缓冲上后即处理其他事务,响应方将调用取出,处理完成后再返回消息。这样就解决了阻塞问题。而作为这个缓冲区的Kafka便应运而生了。
现如今,Kafka已经不止以上功能,但在日常使用中,消息队列还是占了绝大多数情况。对于Kafka的使用,是一个后端/大数据开发人员所必须具备的一项技能。
在本文中,我们将以Kafka集群的搭建为例,初步实践Kafka的应用。
Hadoop
搭建Kafka集群,首先一定是搭建集群(废话)。那这次我们就以Hadoop来搭建。
毕竟大多数人没有实际操作集群的机会或经验,这次用虚拟机来实现,以一般三台设备为例。
首先下载好VM17、CentOS7、JKD1.8.0、Hadoop
在CentOS上安装好Hadoop,JDK后,调整设置:调整防火墙策略、分配静态IP、设置主机名(宿主机即便是DHCP分配的IP,一般也不会变)等。命名为Hadoop2。克隆到三台,并分别做好设置。
结果如图:
Zookeeper
虽然Kafka自2.8开始便已可独立于Zookeeper运行,但实践中依然推荐在Zookeeper环境运行Kafka。 下载并安装:
tar -zxvf zookeeper.tar.gz
设置虚拟机id:
2
修改zoo.cfg,在文件中添加:
server.2=Hadoop102:2888:3888
server.3=Hadoop103:2888:3888
server.4=Hadoop104:2888:3888
进行安装后结果如下:
Kafka
下载好Kafka并分发到每个虚拟机。
tar -zxvf kafka.tar.gz
简单的设置好server.properties,设置好broker.id并链接Zookeeper后:
broker.id=0
log.dirs=/opt/module/kafka/datas
zookeeper.connect=Hadoop102:2181,Hadoop103:2181,Hadoop104:2181/kafka
运行Kafka:
kafka-server-start.sh -daemon config/server.properties
得到如下情况: