消息和批次
消息,kafka里的数据单元,消息由字节数据组成,消息还可以包含键,用来对消息选取分区。
为了提高效率,消息被分批写入kafka,批次就是一组消息,这些消息属于同一个主题和分区,如果只传递单个消息,会导致大量的网络开销,把消息分成批次传输可以减少这些开销。批次包含消息越多,单位事件处理的消息越多,单个消息的传输时间越长,如果进行压缩,可以提升数据传输,但需要更多的cpu消耗。
主题和分区
kafka中的消息使用主题进行分类,一个主题(topic)可以被分为多个分区(partition)。分区本质上是个提交日志,有新的消息消息会有序的追加到某个partition中去,本着先入先出原则。
一个topic会有多个partition,在整个topic中的消息是无序的但是每个partition中数据是有序的。
生产者和消费者,偏移量,消费者群组
- 生产者 : 均衡生产消息使其均匀分布在各个partition中,通过消息的key或者自定义分区器来制定partition
- 消费者 : 一个或多个,消息按照某个partition的生成顺序读取。消费者通过检查偏移量来区分消息是否被读取过
- 偏移量 : 一个分区中消息偏移量是唯一的,每个分区最后读取的消息偏移量会保存到zk或者kafka(新版)中,保证不会重复消费以及消费者关闭后依旧可以从上一次断掉的地方开始消费。
- 消费者组 : 多个消费者构成一个消费者群组
一个group下,每个分区只能被一个消费者使用。
一个消费者可以消费多个分区。
Broker和集群
一个独立的kafka服务器叫Broker,主要工作
1.接受生产者的消息
2.设置消费偏移量
3.提交消息到磁盘保存
4.为消费者提供服务,响应请求,返回消息
多个Broker组成集群,每个集群中选举出一个broker作为控制器,控制器会进行管理,包括将分区分配给broker和监控broker。
每个分区属于一个broker,并且一般一个partition都会有多个副本分布在多个broker上,此时会选出一个broker上的partition作为首领,这个时候会发生分区异步复制
保留消息
在一定期限内保留消息,可以通过server.properties文件进行配置,消息一旦过期或者超过阈值就会被删除。每个topic可以定制过期策略。
Kafka的优点
多生产者和多消费者
基于磁盘数据存储,kafka的数据天生是持久化的
高伸缩,添加或删除机器不影响kafka集群的使用
高性能,kafka可以轻松处理巨大信息