消息队列 Kafka入门
1、消息队列概括
一、应用场景
消息队列是分布式系统中的重要组件,主要解决应用解耦,异步消息,流量削峰登问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有:rocketmq
,rabbitmq
,kafka
、zoreMq
二、消息队列模型
消息队列存在两种模型:队列模型和发布订阅模型
队列模型,也称点对点模型,多个消费者共同消费一个队列,每条消息只发送给一个消费者
订阅发布模式,多个消费者订阅主题,每个消费会发布给所有消费者
两种模式下的优缺点:
- 队列模式中多个消费者共同消费一个队列,效率高
- 发布定于模式中,一个消息可以被多次消费能支持冗余的消费(假如两个消费者共同消费一个消息,防止其中某个消费者挂,同时业务也会有多次处理的问题)
2、kafka
安装
docker-compose
安装方式
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper ## 镜像
container_name: zookeeper
ports:
- "2181:2181" ## 对外暴露的端口号
kafka:
image: wurstmeister/kafka ## 镜像
container_name: kafka
volumes:
- /etc/localtime:/etc/localtime ## 挂载位置(kafka镜像和宿主机器之间时间保持一直)
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 192.168.2.163 ## 修改:宿主机IP
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 ## 卡夫卡运行是基于zookeeper的
KAFKA_ADVERTISED_PORT: 9092
KAFKA_LOG_RETENTION_HOURS: 120
KAFKA_MESSAGE_MAX_BYTES: 10000000
KAFKA_REPLICA_FETCH_MAX_BYTES: 10000000
KAFKA_GROUP_MAX_SESSION_TIMEOUT_MS: 60000
KAFKA_NUM_PARTITIONS: 3
KAFKA_DELETE_RETENTION_MS: 1000
kafka-manager:
image: sheepkiller/kafka-manager ## 镜像:开源的web管理kafka集群的界面
container_name: kafka-manager
environment:
ZK_HOSTS: zookeeper:2181 ## 修改:宿主机IP
ports:
- "9009:9000" ## 暴露端口 9000这个端口冲突太多
3、kafka
概念
kafka
是一个分布式、高吞吐量、高扩展性的消息队列系统。
message
:消息实体,是通信的基本单位,每个producer可以向一个topic发布一些消息producer
:生产者,也就是向kafka
服务器发送消息consumer
:消费者,读取kafka
中的消息consumer group
:消费者组,一个topic
中的消息,在同一个消费者组中只有一个消费者能消费topic
:话题,kafka
中用于区分不同类别消息的名称,由producer
指定partition
:分区,topic物理上的分组,一个topic
可以分为多个partition
,每个parition
都是一个有序的队列broker
:服务集群,已发布的消息保持在一组服务器中