kafka笔记1
Kafka是一款基于发布和订阅的消息系统。一般被称为分布式提交日志或分布式流平台。
Kafka系统是按照一定的顺序持久化保存的,可以按需读取。
Kafka的数据单元被称为消息。类似于数据库中表的一行记录,消息由字节组成,所以没有特别的格式和含义。
消息有一个可选的元数据,就是键,键也是一个字节数组。当消息以一种可控的方式写入分区时,会用到键,最简单的方式就是为键生成一个散列值,然后使用散列值对主题的分区属进行取模。这样可以保证具有相同键的消息总是会写到相同的分区。
批次时一组消息,这些消息属于同一个主题和分区,将消息分批次传输可以减少网络开销。
消息模式有很多选项,比如json,xml,但Kafka的开发者喜欢使用Apache Avro。
Kafka的消息通过主题进行分类,主题就好比数据库中的表。或者文件系统中的文件夹。
主题还可以分成若干个分区,消息以追加方式写入分区,按照先入先出的顺序被消费,因此无法在整个主题范围内保持顺序,但可以保证在单个分区内的顺序。
Kafka通过分区实现数据冗余和伸缩性,分区可分布在不同的服务器上,以此来提供比单个服务器更强大的性能。
通常使用流来描述Kafka的数据,流是一组从生产者到消费者的数据。Kafka以实时的方式处理数据,这叫流失处理,通常与批量处理(Hadoop)做区别。
Kafka的客户端就是Kafka的用户,他们被分为两种:生产者和消费者。除此之外还有其他高级客户端API——用于数据集成的Kafka Connect API和用于流失处理的Kafka streams.这些高级客户端API使用生产者和消费者作为内部组件,提供了更高级的功能。
生产者创建消息,一般一个消息会被发布到一个特定的主题上,生产者默认会把消息均衡地分布到主题的所有分区,这通常是由消息键和分区器来实现。
消费者读取消息,消费者订阅一个或多个主题,并按照消息生成的顺序消费它们。消费者通过检查消息的偏移量来区分已经读过的消息。偏移量是另一种元数据,它是一个不断递增的整数值。在创建消息时,Kafka会把它添加到消息里,在给定分区里,每个消息的偏移量都是唯一的。
消费者把每个分区最后读取的偏移量保存到zookeeper或Kafka上,如果消费者关闭或者重启,它的读取状态不好丢失。
消费者是消费者群组的一部分,一般会有多个消费者共同读取一个主题,群组保证每个分区只被一个消费者使用。
一个独立的Kafka服务器称为一个broker,broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker为消费者提供服务,对读取分区的请求作出响应,返回提交到磁盘上的消息。
broker是集群的组成部分,每个集群都会有一个broker充当集群控制器角色(自动选举),控制器负责管理工作。在集群中,一个分区从属于一个broker,该broker被称为分区的首领,一个分区可以复制到多个broker,这种复制机制为分区提供了消息冗余。
保留消息时Kafka的一个重要特性,默认的保留策略时这样的:要么保留一段时间,要么保留一定的字节数。在任一时刻,达到其中一个标准,消息就会被删除。
Kafka可以无缝支持多个生产者,也可以支持多个消费者。
Kafka有五个使用场景:
1.跟踪用户的活动。
2.传递消息。
3.度量指标和日志记录。
4.提交日志。
5.流处理。