irpas技术客

Kafka常见问题汇总_小白熊wzb_kafka常见问题及解决

irpas 1243

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之后 ,会给生产者响应。? 此时再开始下一次传输 ,极大程度保证了数据的安全性 ,但也不完全保证。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #kafka常见问题及解决 #1 #2