一.概述
1.1 概述
Kafka是一个分布式的消息订阅系统,消息被持久化到一个topic中,topic是按照“主题名-分区”存储的,一个topic可以分为多个partition,在parition(分区)内的每条消息都有一个有序的id号,这个id号被称为偏移(offset),记录消息的消息位置。
作用就是:应用解耦,异步传输,消息通信、并行。Mq支持事务(传统的),kafka不支持事务。
队列具有:先进先出的特性!
1.2 kafka的组件以及作用
1.producer:消息的生产者,主要是用于生产消息的。通过push的方式,主动的将数据推送到kafka的topic当中去。可以通过flume,ftp,Javaapi等方式获取数据。
2.topic:主题,存储抽象信息的集合,可以分为多个分区。
3.partition:消息的分区,每个paritition保存了一部分topic的数据,一个partition包含多个segement。一个segement又包含两部分:.log文件和.index文件
segement:包含两个文件.log 文件和.index文件
.log:记录了我们的数据,文件是顺序读写的
.index文件:记录了.log文件的索引
4.offset:消息的偏移量,记录上一次消息消费的位置。
5.broker:在kafka当中存储消息的服务器。kafka的服务器,kafka集群中包含一个或者多个服务实例(一个broker就是一台机器),这种服务实例被称为Broker。
6.consumer:消息的消费者,主要去消费topic当中的数据的,主动会去pull拉取topic当中的消息
7.Consumer:消息消费者,从kafka的broker中读取消息的客户端,消息的消费者,从topic当中消费消息。
8.Consumer Group:每一个Consumer属于一个特定的Consumer Group(可以为每个Consumer指定 groupName)
9.zookeeper:为了解决消费者消费的时候,确定一个topic当中有多少个分区,分区分别都在哪一台机器上,引入zk来保存这些数据。
1.3 kafka的消费模型关系
kakfa的消费模型,在kakfa当中消费有组的概念:同一时间,一个组当中,只能有一个线程去消费一个paritition当中的数据
1.一个top可以有多个分区,每个分区通过offset,记录消费的位置
2.同一时间,一个分区只能被同一个group里面的其中一个消费者进行消费,一个消费者可以消费多个分区。
3.分区内的数据是顺序的,每个分区内的数据采用的都是顺序读写。
4.如果group中的消费者数量大于分区数量的话,多余的消费者将不会收到任何消息。
5.如果group中的消费者数量等于分区的数量的话,一切都刚刚好。
6.如果group中的消费者数量小于分区的数量的话,则存在有的消费者要消费多个分区的情况。
所以消费者数量一定要小于等于分区的数量。
7.不同分区的消费没有顺序,同一分区里面的数据,是按照顺序消费的。
8.如果消费速度太慢,更改topic的分区数,加多个分区,就会有多个线程来消费,就会比较快。
kafka的分区数与多线程消费_siantbaicn的博客-CSDN博客_kafka 多线程消费单个partition
深入了解Kafka【五】Partition和消费者的关系 - clawhub - 博客园
1.4 kafka的分区策略
kafka的数据生产出来之后究竟落到了哪一个分区里面去了
第一种分区策略:给定了分区号,直接将数据发送到指定的分区里面去
第二种分区策略:没有给定分区号,通过key的hashcode,和 topic的分区数,进行取模。
第三种分区策略:既没有给定分区号,也没有给定key值,直接轮循进行分区
第四种分区策略:自定义分区
1.5 kafka为何读取数据快
1.数据的顺序读写 2.页缓存
1.6 kafka的消息确认机制
Ack的确认机制:
1表示partition的leader已经确认消息保存好了。
0表示partition的leader没有任何确认反馈机制,不安全。
-1:需要leader与follower都确认保存好了才会发送下一条信息。
发送一条消息确认一条消息,这种模式叫做同步模式,发送一批,确认一批,接着发送下一批,叫做异步模式。
1.7 kafka异步模式下,如何控制数据的发送策略
1.时间长短,2.数据条数
1.8 kafka如何保证可靠性数据不丢失
1.生产者:使用ACK确认机制,设置为-1,即在分区中的leader和follower都确认保存好了才返回相应,接着下一条的生产;同时发送模式设置producer.type=sync(同步)
2.broker:使用了分区副本机制对数据的备份;关闭不完全的leader选举,即unclean.leader.election.enable=false。
3.消费者:使用offset防止数据被重复消费,如果kafka集群挂掉之后,重新启动,重新读取上次记录的offset值,接着下一条消费即可。设置enable.auto.commit=false时由于是手动提交的,可以处理一条提交一条,也可以处理一批,提交一批。
1.9 kafka的push与pull操作
Kafka架构是一种异构的设计模式,即生产者只管向集群中push推送数据,消费者只管从集群pull拉取数据。消费者通过pull主动拉取的方式从kafka集群中主动获取数据,不同于以往的消息队列,被动的去接受数据。
1.10 kafka的消费的3要素(了解)
第一个条件:确定哪一个topic
第二个条件:必须知道zk的地址
第三个条件:消息消费的offset偏移量