-
kafka简介
kafka是一个流平台,在这个平台上可以发布和订阅数据流,并将它们保存起来进行处理。它有点像消息中间件,但是它和传统的消息中间件有着很大得差异,消息系统只会传递数据,而ka'f'ka的流处理能力可以让我们高效的处理数据。它可以存储和持续处理大型的数据流。
-
基本概念
- 消息和批次
消息就不用多说。
批次是一组消息,这些消息属于同一主题和分区。为了提高效率,消息会分批写入kafka,但是同一批次里包含的消息越多,单个消息传输的时间就越久,这个需要根据实际的业务去权衡。
- 主题和分区
kafka里的消息用主题进行分类,主题下有若干个分区,有新消息,消息会追加的形式写入分区。
由于主题会有多个分区,所以在整个主题范围内,是无法保证消息顺序的。分区可以分布在不同的服务器上,实现数据冗余和伸缩。
- 偏移量、消费者群组
消费者可以订阅一个或多个主题。通过检查偏移量来区分读取哪个消息。偏移量是一个递增的数据值,消费者每读取一条数据,偏移量就会加1。
订阅同一主题的消费者可以形成一个群组,群组保证了每个分区只能被一个消费者订阅,同一群组下一个分区只能有一个消费者,一个消费者可以使用多个分区。
- broker和集群
一台独立的服务器就是一个broker,多个Broker组成一个集群。
在集群里,一个分区属于一个broker,这个broker属于首领,分区可以被分配给多个broker,这时候就会分区复制。分区复制提供了消息的冗余,一旦首领分区宕机,那个其他的broker可以接管领导权供消费者和胜出者使用。
集群可以负载均衡和高可用性。
-
优点
- 天生消息持久化,不需要额外配置
- 高伸缩性。对于集群的搭建以及伸缩非常方便。
- 高性能。可以轻松处理巨大的数据流。性能高的原因有批量发送、压缩数据、复制拷贝等方面。
-
常见使用场景
- 追踪用户使用详情,例如页面访问次数、点击次数、时间等消息。
- 作为消息中间件传递消息
- 保存日志。例如保存数据库的更新日志,实现数据库的容灾备份等。
- 流处理
kafka性能高体现
- 零拷贝
- 分区
每个主题都包含一个或多个分区,首领分区会尽量均衡的分布在不同的broker中,从而利用集群优势
- 批量发送
- 数据压缩
- 顺序读写
- 高效的序列化方式
-
ISR实现可用性与数据一致性的动态平衡
-
支持多Disk Drive。Broker的log.dirs配置项,允许配置多个文件夹。如果机器上有多个Disk Drive,可将不同的Disk挂载到不同的目录,然后将这些目录都配置到log.dirs里。Kafka会尽可能将不同的Partition分配到不同的目录,也即不同的Disk上,从而充分利用了多Disk的优势。