kafka是一个分布式消息队列
kafka对消息保存时根据Topic进行归类,
发送消息者称为Productor,消息接受者称为Consumer,kafka集群有多个kafka实例
每个实例(server)称为broker.
kafka依赖于zookeeper集群(保存信息,系统的可用性),zookeeper所在结点要开网络监控
为什么需要消息队列
解耦
冗余
kafka架构
相关概念
zookeepr保存的是:
节点状态信息,消费者当前消费消息的状态信息(决定谁是Leader,判断消费到哪里了)
broker是结点(相当于进程、服务)实现负载均衡
生产者发送消息:
给指定topic(有很多分区Partition,分区分主从关系,分区是最小单元)
分区有:Leader 负责通信 Follower 同步Leader数据的作用 一个Leader崩了,其中一个Follower变为Leader 高可用
kafka冗余机制()
同一分区消息是有序的,不同分区消息不一定有序
消费者消费消息的最小单元是最小分区,通过分区来消费的
消费者组消费消息:
同一时间只能是一个Consumer消费者消费消息,一个组里Consumer消费者消费消息是不会重复的(一个分区对不同组进行消费是可以重复的),Consumer消费者与一个分区建立关系后就要消费完
消费者者消费多个分区时不一定有序(如何保证有序:1. 指定分区号 2.指定分区规则,使有序的在同一分区,也就是对key处理)
kafka可以说是半持久化存储的(消息是流失的,数据处理系统,不是数据库)kafka默认保存7天,保存在内存中也就是磁盘里
分布式模型:
在同一个kafka集群中:拥有同一个Topic——却有不同分区,不同的数据——不同的分区 (kafka中基本所有角色都是可分布式)