加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

面试问Kafka,这一篇全搞定

发布时间:2019-11-30 06:01:55 所属栏目:Windows 来源:站长网
导读:副标题#e# 应大部分的小伙伴的要求,今天这篇咱们用大白话带你认识 Kafka。 图片来自 Pexels Kafka 基础 消息系统的作用 大部分小伙伴应该都清楚,这里用机油装箱举个例子: 所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的

面试问Kafka,这一篇全搞定

日志分段存储

Kafka 规定了一个分区内的 .log 文件最大为 1G,做这个限制目的是为了方便把 .log 加载到内存去操作:

00000000000000000000.index00000000000000000000.log00000000000000000000.timeindex00000000000005367851.index00000000000005367851.log00000000000005367851.timeindex00000000000009936472.index00000000000009936472.log00000000000009936472.timeindex

这个 9936472 之类的数字,就是代表了这个日志段文件里包含的起始 Offset,也就说明这个分区里至少都写入了接近 1000 万条数据了。

Kafka Broker 有一个参数,log.segment.bytes,限定了每个日志段文件的大小,最大就是 1GB。

一个日志段文件满了,就自动开一个新的日志段文件来写入,避免单个文件过大,影响文件的读写性能,这个过程叫做 log rolling,正在被写入的那个日志段文件,叫做 active log segment。

如果大家有了解 HDFS 就会发现 NameNode 的 edits log 也会做出限制,所以这些框架都是会考虑到这些问题。

Kafka 的网络设计

Kafka 的网络设计和 Kafka 的调优有关,这也是为什么它能支持高并发的原因:

面试问Kafka,这一篇全搞定

首先客户端发送请求全部会先发送给一个 Acceptor,Broker 里面会存在 3 个线程(默认是 3 个)。

这 3 个线程都是叫做 Processor,Acceptor 不会对客户端的请求做任何的处理,直接封装成一个个 socketChannel 发送给这些 Processor 形成一个队列。

发送的方式是轮询,就是先给第一个 Processor 发送,然后再给第二个,第三个,然后又回到第一个。

消费者线程去消费这些 socketChannel 时,会获取一个个 Request 请求,这些 Request 请求中就会伴随着数据。

线程池里面默认有 8 个线程,这些线程是用来处理 Request 的,解析请求,如果 Request 是写请求,就写到磁盘里。读的话返回结果。

Processor 会从 Response 中读取响应数据,然后再返回给客户端。这就是 Kafka 的网络三层架构。

所以如果我们需要对 Kafka 进行增强调优,增加 Processor 并增加线程池里面的处理线程,就可以达到效果。

Request 和 Response 那一块部分其实就是起到了一个缓存的效果,是考虑到 Processor 们生成请求太快,线程数不够不能及时处理的问题。

所以这就是一个加强版的 Reactor 网络线程模型。

总结

集群的搭建会再找时间去提及。这一篇简单地从角色到一些设计的方面讲述了 Kafka 的一些基础,在之后的更新中会继续逐步推进,进行更加深入浅出的讲解。

面试问Kafka,这一篇全搞定

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读