1.消息队列
相关概念:消息队列中间件是分布式系统中非常重要的中间件,主要解决 应用耦合,异步消息,流量削峰 等问题。实现 高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。
使用场景如:
- 异步处理: 如用户注册后,发送注册邮件,再发送注册短信。
- 应用解耦: 如用户下单后,订单系统需要通知库存系统。
- 流量削峰:如秒杀活动,一般会因为流量过大,导致流量暴增。
- 日志处理:解决大量日志传输问题,日志采集客户端,负责日志采集,写入消息队列。消息队列复制日志后续处理转发。
- 消息通讯:
目前生产环境使用较多的消息队列有:activeMQ、rabbitMQ、zeroMQ、Kafka、metaMQ、rocketMQ等。
2.了解kafka
kafka是一种高吞吐量的分布式发布订阅消息系统,他可以处理消费者规模较大网站中所有动作流数据。官网地址:http://kafka.apache.org/http://kafka.apache.org/
优势:高吞吐量,非常普通的应将kafka也可以支持每秒数百万的消息。 支持通过kafka服务器和消费机集群来区分消息。支持hadoop并行数据加载。
关键概念:
- broker: kafka集群中的一台或多台服务器统称broker。
- Topic: kafka处理的消息源(feeds of messages)的不同分类。
- partition:Topic物理机上的分组,一个topic可分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。
- replication-factor:用来设置topic的副本数每个主题可以有多个副本,副本位于集群中不同的broker上,也就是说副本的数量不能超过broker的数量,否则创建主题时会失败。
- offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息。
- Message :消息,是通信的基本单位。每个producer可以向一个topic(主题)发布一些消息。
- Producers:消息和数据的生产者,向kafka的一个topic发布消息的过程叫producers。
- consumers:消息和数据消费者,订阅topic并处理其发布的消息的过程叫做consumers。
3.安装kafka
我们直接去官网下载,解压。
$ wget http://mirrors.shu.edu.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz
$ tar -zxvf kafka_2.11-2.0.0.tgz
4.配置启动
a. 启动zookeeper
#启动zookeeper 指定 zookeeper 配置文件
./bin/zookeeper-server-start.sh ./config/zookeeper.properties
b. 启动kafka
#打开kafka配置文件,开启监听端口
$ vim server.properties
listeners=PLAINTEXT://localhost:9092
#启动kafka 服务
$ ./bin/kafka-server-start.sh ./config/server.properties
注意 kafka基于zookeeper,必须先启动zookeeper ,再启动kafka
c.启动消费者
$ ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
d.启动生产者
$ ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
整体效果如下图,窗口上是我启动的消费窗口 ,窗口下是我启动的生产者窗口: