传统定义:分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。是开源的分布式时间流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用
发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接受感兴趣的消息
常见的消息队列:Kakfa、ActiveMQ、RabbitMQ
在大数据场景主要常用Kafka。JavaEE开发主要采用ActiveMQ、RabbitMQ、RocketMQ
消息队列主要应用场景:缓冲/消峰、解耦、异步通信
缓冲/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息处理速度不一致的情况

解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束

异步通信:允许用户吧一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们

消息队列的两种模式:点对点模式、发布/订阅模式
点对点模式(不利于处理复杂业务场景)
消费者主动拉取数据,消息收到后清除消息(一个生产者对一个消费者)

发布/订阅模式

Kafka的基础架构


Broker:kafka集群包含一个或多个服务器,服务器节点成为broker
Topic:
Partition:
Leader
每个partition有多个副本,其中有且只有一个作为leader,负责数据读写
Follower(只负责备份)
Producer
生产者将消息发布到kafka的Topic中,broker接收到生产者的消息后,将消息追加数据到segment文件中,生产者发送的消息存储到一个partition中,生产者也可以指定数据存储的partition
Consumer
消费者可以从broker中读取数据,消费者可以消费多个Topic中的数据
Consumer group
Offset偏移量
单播消息
一个消费组里只能有一个消费者消费消息
进入官网下载kafka,连接Linux虚拟机并传入,解压:
tar -zxvf kafka_2.12-3.0.0.tgz -C ~/kafka(解压目标位置)
修改名称:mv kafka_2.12-3.0.0 kafka

唯一标识,不能重复

消息数据存储位置,默认Linux临时文件,会定期清除,所以需要修改

Zookeeper连接,默认本地

运行kafka:
cd ./kafka
./bin/kafka-server-start.sh ./config/server.properties
创建一个主题
bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic heima --partitons 2 --replication-factor 1
--zookeeper:指定kakfa连接zookeeper的地址
--topic:指定创建的主题名
--partitions:指定分区的个数,发布消息是发送到主题的分区中
--replication-factor:指定副本因子
--create:创建主题的动作指令
查看所有topic
./bin/kafka-topics.sh --list --bootstrap-server 192.168.235.137:9092
在Topic中生产消息
./bin/kafka-console-producer.sh --topic wangting --broker-list 192.168.235
消费者消费某topic上的消息
./bin/kafka-console-consumer.sh --from-beginning -topic wangting --bootstrap-server 192.168.235.137:9092
可扩展性:集群的性能不限制于单一服务实体,新的服务实体可以动态的恶添加到集群,从而增强集群的性能
高可用性:集群当其中一个结点发生故障时,这台结点上所运行的应用程序将在另一台结点上自动换管
负载均衡:负载均衡吧人物比较均匀的分布到集群环境下的计算和网络资源,以提高数据吞吐量
错误恢复:如果集群中某一台服务器发生故障无法使用,资源和应用程序可转移到可用的集群结点上。
Broker:每个Broker即kafka服务实例,多个Broker构成kafka集群,生产者发布的消息将保存在Broker中,消费者从Broker中拉取消息进行消费
Zookeeper:通过Zookeeper管理自身集群,如:Broker列表管理、Partition与Broker的关系、Partition与Consumer的关系、Producer与Consumer负载均衡、消费进行Offset记录、消费者注册等。为了达到高可用,zookeeper也必须是集群
1.搭建Zookeeper集群并启动
2.将原来的kafka目录复制多份,日志目录同时也要复制多份,重新开启集群需要将日志目录中的内容全部清空。
3.编辑配置文件:broker.id用于标识区分broker;其他broker的日志目录修改;zookeeper.connect连接ip:要将zookeeper集群的几个服务器都填上去
副本就是为了主题中的分区进行多个备份,副本之间会选举一个leader多个follower。
Isr即可用的结点(可以同步和已同步节点存入isr集合),当Isr有个节点性能较差,则会被踢出集合中,Leader会从Isr中选举出
集群有多个broker,创建主题时可以指明该主题有多少个分区(把消息拆分在不同的分区中存储),可以为分区创建多个副本,不同的副本存入不同的Broker
