1. kafka是什么,做什么用?
kafka 是一个存储系统、消息队列、实时流式处理系统,用来在生产者和消费者之间产生一个缓冲区存放数据,来避免出现过多数据无法处理从而导致堵塞的状况 。
2. topic是什么,partition是什么?partition的多与少会影响什么?
topic:主题,是kafka中的基本存储结构。
partition:分区,每一个topic都有多个分区。
partition的多与少会影响消费端的并发读取数据的效率 。
3. 副本是什么,为什么要有副本?副本为什么要分leader和follower?
每一个topic有多个partition ,每一个partition又有多个副本 ,用来保证数据的安全性。
多个副本之间需要同步数据 ,因此分除了leader和follower, 读写需求都是与leader交互
leader再同步给follower。
4. 生产者是什么,消费者又是什么?
生产者是数据源 ,用来产生数据 producer 。
消费者是数据目的 ,用来消费(处理)数据 consumer 。
5. 消息偏移量是什么,消费者消费偏移量又是什么?
消息偏移量 offset:,消息是kafka中存储数据的基本单位 kafka中的数据是由无数条消息组成的 ,kafka中存储的数据不具有自己的结构 ,存进去是什么就是什么 ,可以提升效率。
消息偏移量:就是给每条数据的一个编号, kafka就是通过消息偏移量来辨别不同的消息。
消费者偏移量:kafka是实时流式处理系统, 类似于写入一条消息处理一条这样 ,因此在消费者消费数据时会不间断的从kafka拉取数据 。因此消费者实例中有一个参数 ,消费者偏移量 ,用来记录该消费者在某一topic中的某一fenqu中读取消息的位置 ,从而确认下次读取消息的起始位置。
6. 消费者组是什么,有什么特点?
不同的消费者可以组成同一个消费者组 ,kafka中消费者在读取数据时 是以消费者组为单位进行读取的。同一个消费者组之间的不同消费者不会读取同一个区的数据 ,它们会并行读取数据 ,来组成一个topic中的完整的数据
7. kafka的消息存储格式有哪些组成部分(数据字段)?
crc:校验字段 用来验证数据有没有损毁
key:key的数据
keylength:key部分数据的大小
value:value的数据
valuelength:value数据部分的大小
kafka版本字段 : 用来确认kafka的版本
压缩编码字段 :用来确认压缩的类型 如gzip
还有一个时间戳字段表示创建时间(create time)还是追加时间(append time)
8. kakfa的数据存储目录结构?
kafka存储目录下是该broker中各个topic的每个分区目录,
如 aaa-bbb-1-0 表示aaa-bbb-1 topic 中的 0号分区;
aaa-bbb-1-1 表示aaa-bbb-1 topic 中的 1号分区。
kafka中的每个topic的每个分区都有若干个副本, 而每一个副本都是有若干个分段组成的。
因此在每个分区目录中 ,有若干个分段的文件来对数据进行存储(segment)
每个分段都由两个文件构成 ,它们的文件名就是该分段所存储数据的起始消息偏移量 offset
如第一个分段的文件名为 00000000000000000 。
xxxx.index 消息offset -> log文件中该消息的物理偏移量位置;
0 55
10 125 (offset为10的消息在该消息中的物理偏移量为125)
20 657
30 1024
(kafka中采取的是稀疏索引,这里只是为了简单举例)
xxxx.log 存储消息的文件。
9. kafka消费者订阅主题的方式有哪两种?有何区别?
assign :指定该消费者在消费者组中读取的topic的分区,无法动态改变, 因此在写程序的时候应该安排好, 同个消费者组的不同消费者拉取不同的分区 ,不重复且拉取完整。
subscribe :具有消费者自动再均衡功能 。在用subscribe订阅主题的消费者组中, 无论添加/删除消费者, 剩余的消费者都会完整拉取订阅主题的所有消息, 并且尽量保证数据拉取均衡。
10.ack参数是干什么用的?有哪几种取值,分别代表什么含义
ack参数用来确定kafka中的消息获取相应级别,可取值 0 1 -1 ,含义如下
0 :生产者在传输一批消息之后, 不管kafka服务端有没有获取 ,直接开始传输下一批
最不能保证数据的安全性 ,但是优点是快。
1 :生产者在传输一批消息之后, kafka服务器中的leader在获取到完整数据之后, 会给生产者响应。生产者在收到相应之后才会开始下一批数据的传输 ,一定程度保证数据安全性 但不完全保证。
-1: 生产者在传输一批消息之后, kafka服务器中的leader在获取到完整数据并且同步给所有isr中的所有follower之后 ,会给生产者响应。 此时再开始下一次传输 ,极大程度保证了数据的安全性 ,但也不完全保证。