Kafka 面试连环炮下篇(花式百态、缓存机制与监控)
2023-10-02 23:12:38
Kafka 百态
很多时候,我们学习 Kafka 不可能局限于理论知识,我们应该知道 Kafka 的百态,在企业实际场景中,它不仅可以解决常规消息队列问题,还可以发挥一些额外的作用,这也是我对比过不少消息中间件后,最为推荐学习的中间件。
离线应用:
先来直观地谈谈离线应用,比如淘宝、京东电商业务,会有很多的日志信息,这些日志是比较零散的,且日志的写入量非常庞大,这时就有很多公司运用 Kafka 来处理日志。日志数据在传输前会进行压缩,在 Kafka Topic 中,日志能够做到数据分片、有序,方便离线程序进行数据分析。
缓存应用
还有像缓存应用,我们知道 Redis 的出现很大程度上得益于内存成本的降低,很多场景都会运用 Redis。但是 Kafka 作为分布式消息中间件,它也能实现缓存。
优点:
-
大容量:Kafka 在使用时,提供了很强的扩展性,可以动态增加或者减少分区,从而极大地提升存储容量。
-
分布式:Kafka 基于分布式架构,实现了数据在各个节点的副本,使得 Kafka 集群高可用、高可靠。
-
持久化:Kafka 对消息持久化到磁盘,并且提供了多种数据副本机制来保障数据可靠性。
劣势:
-
延迟:由于 Kafka 是异步传输的,消息在 Kafka Topic 中传递,会有部分延迟,不能做到瞬时传递。
-
空间开销:Kafka 存储的消息会产生大量的磁盘占用。
-
运维成本:Kafka 集群的搭建与运维会带来一定的成本。
以上便是 Kafka 的百态之一,如有场景能够匹配到类似需求,不妨发挥 Kafka 的多种角色,让 Kafka 实现多方面价值,展示它的能力。
Kafka 的缓存机制
Kafka 自带了磁盘缓存和内存缓存,先聊聊内存缓存,我们知道 Producer 往 Topic 中发送消息是通过 RecordBatch 方式,即 Producer 将数据缓存到内存中,一旦达到指定大小或者指定时间后,则向 Leader 副本所在 Broker 节点发送数据。所以,Producer 这边,其实是有一个内存缓存池的,主要是为了避免每次都创建连接,反复进行发送。
而 Consumer 读取数据时,它也有一个内存缓存池,就是我们所说的 Fetcher,主要是避免了每次都去调用 Broker 来获取数据,当 Consumer 消费消息后,会把相关信息保存到缓存池中,消费下一次时,就不用重新创建连接并向 Broker 获取数据,大大地提升了读取性能。
磁盘缓存是将消息追加到文件的末尾,当文件大小达到一定阈值后,再把文件刷到磁盘。如果一条消息太大,那么就会进行分段存储,在读取时也会依次读取并进行重组,对于每个消息的磁盘索引记录,会保存到内存中。
Kafka 的监控
Apache Kafka 作为分布式流平台,提供了多种监控手段,可以让用户监控和管理 Kafka 集成,以下重点介绍两种 Kafka 的监控工具。
JMX 监控
Kafka 为每个组件提供了完整的 JMX 指标,用户可以使用 JMX 控制台或第三方监控工具,比如 Zabbix、Prometheus 等,来监控 Kafka 集成。
Kafka 内置监控工具
Kafka 0.10.0.0 及以后的版本提供了内置监控工具,称为 Kafka Metrics,它使监控 Kafka 更加简单和易于使用。用户可以使用 Kafka 的 REST API 来访问这些指标,或者使用第三方监控工具,比如 Grafana 等,来可视化这些指标。
Kafka 的花式百态与缓存机制、监控的总结
Kafka 不仅能够处理大量数据,且能满足不同业务场景需求,比如可以做离线应用的日志分析、电商平台的订单处理、金融领域的支付消息队列、游戏领域的排行榜系统,还有上面介绍的缓存机制和监控等等,且 Kafka 的花式应用在不断增多。
缓存机制主要有内存缓存池和磁盘缓存,内存缓存池用于减少连接的创建和数据获取操作,而磁盘缓存用于将消息追加到文件的末尾,以实现数据持久化。Kafka 提供了多种监控手段,比如 JMX 监控和 Kafka 内置监控工具,用户可以使用这些工具来监控和管理 Kafka 集成。
好了,关于 Kafka 的花式百态、缓存机制与监控,就先聊到这里,虽然不是很详细,但也是给大家提供了一个学习方向,对我有任何问题的,可以在评论区留言,期待与您进行技术交流。