Kafka 设计思想

Kafka设计为处理高容量实时数据馈送,强调高吞吐量和低延迟。它利用文件系统和pagecache实现高效持久化,采用日志结构以O(1)复杂度进行读写操作。Producer采用批量发送和异步发送提高性能,Consumer通过拉取方式获取数据,允许回溯消费。Kafka支持端到端批量压缩和负载均衡,以适应各种数据处理场景。
摘要由CSDN通过智能技术生成

Kafka 设计思想

参考

动机

Kafka 被设计为一个统一的平台来处理大公司可能拥有的所有实时数据馈送。要做到这点,需要考虑相当广泛的用例。

Kafka 必须具有高吞吐量来支持高容量事件流,例如实时日志聚合。

Kafka 需要能够处理大量的数据挤压,以便能够支持来自离线系统的周期性数据加载。

这也意味者系统必须低延迟分发,来处理更传统的传递用例。

持久化

Kafka 对消息的存储和缓存严重依赖于文件系统。人们对于 “磁盘速度慢” 的普遍印象,使得人们对于持久化的架构能够提供强有力的性能产生怀疑。事实上,磁盘
的速度比人们预期的要慢的多,也快得多,这取决于人们使用磁盘的方式。而且设计合理的磁盘结构通常可以和网络一样快。

关于磁盘性能的关键事实是,磁盘的吞吐量和过去十年里磁盘的寻址延迟不同。因此,使用 6 个 7200 RPM、SATA 接口、 RAID-5 的磁盘阵列在 JBOD 的配置下
的顺序写入的性能约为 600MB/s, 但随机写入的性能仅约为 100K/s,相差 6000 被以上。因为线性的读取和写入是磁盘使用模式中最有规律的,而且操作系统
进行了大量的优化。现在操作系统提供了 read-ahead 和 write-behind 技术,read-ahead 是以大的 data block 为单位预先读取数据,而 write-behind 是
将多个小型的逻辑写并成一次大型的物理磁盘写入。关于该问题的进一步讨论可以参考 ACM Queue article,他们发现实际上顺序磁盘访问在某些情况下比随机内存访问还要快

为了弥补这种性能差异,现代操作系统在越来约重视使用内存对磁盘进行 cache。现代操作系统主动将所有空闲内存用作 disk caching,代价是内存回收时性能会有所降低。
所有对磁盘的读写操作都会通过这个统一的 cache。如果不使用直接 I/O,该功能不能轻易关闭。因此即使进程维护了 in-process cache,该数据也可能被复制到
操作系统的 pagecache 中,事实上所有内容都被存储了两份。

此外,Kafka 建立在 JVM 之上,任何了解 Java 内存使用的人都直到两点:

  1. 对象的内存开销非常高,通常是所存储的数据的两杯(甚至更多)。
  2. 随着堆中数据的增加,Java 的垃圾回收变得越来越复杂和缓慢。

受这些因素影响,相比于维护 in-memory cache 或者其他结构,使用文件系统和 pagecache 显得更有优势——我们可以通过自动访问所有空闲内存将可以缓存的
容量至少翻倍,并且通过存储紧凑的字节结构而不是对立的对象,有望将缓存容量再翻一番。这样使得 32 GB 的机器缓存容量可以达到 28-30 GB,并且不会产生额外
的 GC 负担。此外,即使服务重新启动,缓存依旧可用,而 in-process cache 则需要在内存中重建(重建一个 10 GB 的缓存可能需要 10 分钟),否则进程既要从
cold cache 的状

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka设计思想主要包括以下几个方面: 1. 高吞吐量:Kafka设计为一个高吞吐量的消息系统,能够处理大规模的数据流。它通过有效地利用磁盘和内存,并实现了零拷贝技术,来提供极高的数据吞吐能力。 2. 分布式架构:Kafka采用分布式的架构,可以在多台服务器上运行多个实例组成一个集群。每个实例都负责一部分的数据和请求处理,从而实现了数据的水平扩展和负载均衡。 3. 分区和复制:Kafka将每个主题(topic)分成一个或多个分区(partition),每个分区可以在不同的服务器上进行复制。这样既能够提高系统的可靠性和容错性,又能够支持大规模数据的并行处理。 4. 持久化存储:Kafka使用了持久化的消息存储机制,在消息发送后会将消息写入磁盘进行持久化存储。这样可以保证即使在消息发送后发生故障,消息也不会丢失。 5. 灵活的消费模型:Kafka支持多种消费模型,包括发布-订阅模型和消息队列模型。在发布-订阅模型中,一个消息可以被多个消费者订阅并处理;在消息队列模型中,每个消费者只能消费一个消息。 6. 高并发性:Kafka能够支持大规模的并发读写操作,可以同时处理数千个客户端的请求。它通过多线程和分区的方式来实现高并发操作。 通过以上设计思想Kafka能够提供高性能、可靠性和可扩展性的消息传输和处理能力,广泛应用于日志收集、实时分析、数据流处理等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值