消息队列
Kafka
使用场景
-
日志聚合:可收集各种服务的日志写入kafka的消息队列进行存储
-
消息系统:广泛用于消息中间件
-
系统解耦:在重要操作完成后,发送消息,由别的服务系统来完成其他操作
-
流量削峰:一般用于秒杀或抢购活动中,来缓冲网站短时间内高流量带来的压力
-
异步处理:通过异步处理机制,可以把一个消息放入队列中,但不立即处理它,在需要的时候再进行处理
如何使用
-
创建集群
-
新增Topic
-
编写生产者逻辑
-
编写消费者逻辑
Kafka中重要的组件
-
Topic:逻辑队列,每条发布到Kafka集群的消息都会归集于此,Kafka是面向Topic 的
-
Cluster:物理集群,每个集群中可以建立多个不同的Topic
-
Partition:每个Topic通常有多个分片
-
Producer:消息生产者,发布消息到Kafka集群的终端或服务
-
Consumer:消费者,负责消费Topic中的消息,从Kafka集群中消费消息的终端或服务
-
ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉
-
每个Consumer都属于一个Consumer Group,每条消息只能被Consumer Group中的一个Consumer消费,但可以被多个Consumer Group消费。如果所有实例都属于同一个Group,那么它实现的就是消息队列模型;如果所有实例分别属于不同的Group,那么它实现的就是发布/订阅模型
-
Offset:消息在partition内的相对位置信息,可以理解为唯一ID,在partition内严格递增
-
Replica:每个分片有多个Replica,Leader Replica将会从ISR中选出
性能优化
-
批处理:生产者可以批量发送消息,以减少IO次数
-
数据压缩:通过压缩减少消息大小,目前支持Snappy,Gzip,LZ4,ZSTD压缩
-
零拷贝:减少数据在内核空间和用户空间的拷贝次数