一、kafka概述
kafka是一个分布式基于发布/订阅的消息队列,构建一个实时传输信息的管道,主要用于大数据实时处理。kafka对消息的保存通过topic进行归类,发送消息称为producer,消息接受者称为consumer,kafka集群由多个kafka实例组成,每个实例称为broker,无论是kafka集群,还是consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。kafka的元数据存储在zookeeper中。
类似的产品:
1、Active MQ:上一代
2、Rabbit MQ:上一代
3、Rocket MQ:17年阿里开源的产品,性能与kafka差不多,生态稍差
消息队列经典的应用场所
kafka两种模式:
1、点对点一对一模式。
2、一多多模式,发布/订阅模式
kafka核心概念
1、broker:一台kafka服务器就是一个broker。一个集群由多个broker组成。
2、Topic:Topic 就是数据主题,kafka建议根据业务系统将不同的数据存放在不同的topic中
3、Partition:每个topic可以有多个分区,通过分区的设计,topic可以不断进行扩展。
4、Offset: 数据会按照时间顺序被不断第追加到分区的一个结构化的commit log中!每个分区中存储的记 录都是有序的,且顺序不可变!这个顺序是通过一个称之为offset的id来唯一标识!因此也可以认为offset是有序且不可变的!
持久化:
数据最后会存到磁盘的,消费者消费了数据,数据也不会删除,但是会根据一个保存策略来释放磁盘空间。
副本机制:
日志的分区partition (分布)在Kafka集群的服务器上。每个服务器在处理数据和请求时,共享这些分区。每一个分区都会在已配置的服务器上进行备份,确保容错性。
每个分区都有一台 server 作为 “leader”,零台或者多台server作为 follwers 。leader server 处理一切对 partition (分区)的读写请求,而follwers只需被动的同步leader上的数据。当leader宕机了,followers 中的一台服务器会自动成为新的 leader。通过这种机制,既可以保证数据有多个副本,也实现了一个高可用的机制!
基于安全考虑,每个分区的Leader和follower一般会错在在不同的broker!