1.是什么?
Kafka是一个分布式、支持分区、多副本的,基于zookeeper协调的分布式消息中间件
2 使用场景
核心的场景、原因有 3 个:解耦、异步、削峰。
具体:
- 日志收集
- 消息系统:解耦和生产者和消费者、缓存消息等。
- 用户活动跟踪:用户的各种活动,如浏览、搜索、点击等活动,发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
- 运营指标:包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
3.基本概念术语
名称 | 解释 |
---|---|
Broker | 一个Kafka节点即是一个broker,一个或者多个Broker可以组成一个Kafka集群 |
Topic | Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic |
Producer | 消息生产者,向Broker发送消息的客户端 |
Consumer | 消息消费者,从Broker读取消息的客户端 |
ConsumerGroup | 每个Consumer属于一个特定的Consumer Group,一条消息可以被多个不同的Consumer Group消费,但是一个Consumer Group中只能有一个Consumer能够消费该消息 |
Partition | 物理上的概念,一个topic可以分为多个partition,每个partition内部消息是有序的 |
offset | partition中的消息的唯一的编号 |
Controller | Kafka集群中会有一个或者多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态。 |
leader | leader和follower是针对partition,而controller是针对broker的,leader 负责partition的所有读写请求,其它follewer只接收leader同步来的数据 |
- replicas 表示某个partition在哪几个broker上存在备份。不管这个几点是不是”leader“,甚至这个节点挂了,也会列出。
- isr 是replicas的一个子集,它只列出当前还存活着的,并且已同步备份leader一定程度(时间参数)partition的节点。
- LEO:每个分区的当前最大offset+1,即下一条待写入消息的offset
- HW:多个partition中最小的LEO(log-end-offset)即HW
producer通过网络发送消息到Kafka集群,然后consumer来进行消费。
服务端(brokers)和客户端(producer、consumer)之间通信通过TCP协议来完成。
4.术语详解
Topic是Kafka对消息进行分类的一个概念,同类消息发送到同一个Topic下面。
对于每一个Topic,下面可以有多个分区(Partition)日志文件:
Partition是有序的message序列,每个partition,都对应一个commit log文件。
message按顺序添加到一个叫做commit log的文件中。
每个partition中的消息都有一个唯一的编号,称之为offset,用来唯一标示某个分区中的message。 +
kafka一般不会删除消息,不管这些消息有没有被消费。只会根据配置的日志保留时间(log.retention.hours)确认