文章目录
一、Kafka简介
1、Kafka概念
Apache Kafka是一个分布式的基于push-subscribe的消息系统,它具备快速、可扩展、可持久化的特点。它现在是Apache旗下的一个开源系统,作为Hadoop生态系统的一部分,被各种商业公司广泛应用。它的最大的特性就是可以实时地处理大量数据以满足各种需求场景。比如基于Hadoop的批处理系统、低延迟的实时系统、Storm或Spark流式处理引擎。
2、Kafka架构组件
- topic:消息存放的目录即主题(发布订阅的对象)。
- Producer:生产消息到topic的一方。
- Consumer:订阅topic消费消息的一方。
- Broker:Kafka的服务实例就是一个broker。
3、Kafka的优点
- Kafka支持多个生产者和消费者;
- Kafka支持broker的横向扩展;
- Kafka副本集机制,能实现数据冗余,保障数据尽量不丢失;
- 通过topic将不同的消息进行分类(几乎所有的MQ都有);
- 通过分批发送压缩的方式,减少网络数据传输开销,提升数据吞吐量;
- 支持多种模式的消息(schema);
- 可基于磁盘实现数据持久化;
- 高性能处理消息,在处理大量数据的情况下,能保证亚秒级的消息延迟;
- 一个消费者支持多个主题的消费;
- 对CPU和内存消耗较小;
- 对网络开销相对较小;
- 支持跨数据中心的消息复制;
- 支持镜像集群。
4、Kafka的应用场景
- 日志收集
- 消息系统:解耦、生产者、消费者和缓存消息等。
- 用户活动跟踪
- 运营指标
- 流式处理
二、kafka集群部署
1、节点规划
ip | 主机名 |
---|---|
192.168.200.11 | zookeeper1 |
192.168.200.12 | zookeeper2 |
192.168.200.13 | zookeeper3 |
2、解压Kafka软件包
下载路径:
http://kafka.apache.org/downloads
(这里用到的Kafka版本为kafka_2.11-1.1.1)
上传Kafka压缩包至/root目录下并解压(三个主机)
3、修改3个节点配置文件
(1) zookeeper1:
进入kafka_2.11-1.1.1/config目录下,编辑server.properties文件
在配置文件中找到如下两行,并注释掉(即在文本前加#),如下所示:
#broker.id=0
#zookerper.connect=localhost:2182
然后在配置文件的底部添加如下3个配置:
broker.id=1
zookeeper.connect=192.168.200.11,192.168.200.12,192.168.200.13:2181
listeners=PLAINTEXT://192.168.200.11:9092
命令解析:
- broker.id:每台机器不能一样。
- zookeeper.connect:因为有3台ZooKeeper服务器,所以在这里zookeeper.connect设置为3台。
- listeners:在配置集群的时候,必须设置,不然以后的操作会报找不到leader的错误。
另外两台服务器,zookeeper.connect的配置跟这里的一样,但是broker.id和listeners不能一样。
(2)zookeeper2节点:
broker.id=2
zookeeper.connect=192.168.200.11,192.168.200.12,192.168.200.13:2181
listeners=PLAINTEXT://192.168.200.12:9092
(3)zookeeper3节点:
broker.id=3
zookeeper.connect=192.168.200.11,192.168.200.12,192.168.200.13:2181
listeners=PLAINTEXT://192.168.200.13:9092
4、启动服务
分别进入三台主机的kafka_2.11-1.1.1/bin目录下,启动 服务命令:
#./kafka-server-start.sh -daemon ../config/server.properties
5、测试服务
在zookeeper2节点,进入kafka_2.11-1.1.1/bin目录下,创建topic命令如下:
#./kafka-topics.sh --create --zookeeper 192.168.200.12:2181 --replication-factor 1 --partitions 1 --topic test
如果成功的话,会输出“Created topic “test”.”。
查看topic,虽然topic是在192.168.200.12上创建的,但是在其他机器上也能看到。例如在任意启动的机器kafka_2.11-1.1.1/bin的目录中执行命令如下:
zookeeper3:
#./kafka-topics.sh --list --zookeeper 192.168.200.12:2181
测试成功!说明kafka集群部署成功