`

Kafka是什么

阅读更多
Kafka 的核心功能是高性能的消息发送和高性能的消息消费.



在设计一个消息引擎系统的时候需要考虑两件事:
1.消息设计:消息必须是语义清晰的,且格式应当具备通用性.
2.传输协议设计:消息要能够在不同的系统间传输.
3.消息引擎范型:比如消息队列,发布/订阅.

消息队列模式:消息被一个生产者生产出来,放到消息队列中,消费者从指定位置消费消息,一旦消息消费完成,则从队列中移除该消息,所以,生产者和消费者是一一对应的.

发布/订阅模式:这种模式中有 topic 的概念(类似于盛装消息的容器),消费者订阅该主题,生产者生产消息,发送到主题上,然后所有订阅了该主题的消费者都能收到消息.

Kafka 在设计之初就是为了解决互联网公司超大量级数据的实时传输,所以其考虑了如下几个方面:
1.吞吐量/时延
2.消息持久化
3.负载均衡和故障转移
4.伸缩性

Kafka 是如何实现高吞吐量,低时延的了?
首先Kafka 的写入操作很快,因为每次写入操作都只是把数据写入到操作系统的缓存页中,然后由操作系统自行决定什么时候吧页缓存中的数据写会磁盘.
1.操作系统页缓存是在内存中分配的,所以消息写入的速度非常快.
2.Kafka不必直接与底层的文件系统打交道.所有繁琐的I/O都交由操作系统来处理.
3.Kafka写入操作采用追加写入的方式,避免了磁盘随机写操作.

首先 Kafka 尝试从 OS 的页缓存中读取,如果命中便把消息经页缓存直接发送到网络的 Socket(Zero Copy).

一般来说,数据从磁盘,然后通过网络发送出去需要拷贝 4 次.
1.通过 DMA,将数据从磁盘拷贝到内核缓冲区
2.通过 CPU,将数据从内核缓存区拷贝到用户缓冲区.
3.通过 CPU,将数据从用户缓冲区拷贝到 Socket 缓冲区.
4.通过 DMA,将数据从 Socket 缓冲区拷贝到网络.



2.mmap
让数据不需要拷贝到用户缓冲区.
1.通过 DMA,将数据从磁盘拷贝到内核缓冲区
2.操作系统将这段内核缓冲区和用户程序共享
3.通过 CPU,将数据从内核缓冲区拷贝到 Socket 缓冲区.
4.通过 DMA,将数据从 Socket 缓冲区拷贝到网络.

3.sendfile

目前为止,我们已经减少了数据拷贝的次数了,但是仍然存在一次拷贝,就是页缓存到socket缓存的拷贝。那么能不能把这个拷贝也省略呢?

借助于硬件上的帮助,我们是可以办到的。之前我们是把页缓存的数据拷贝到socket缓存中,实际上,我们仅仅需要把缓冲区描述符传到socket缓冲区,再把数据长度传过去,这样DMA控制器直接将页缓存中的数据打包发送到网络中就可以了。

总结一下,sendfile系统调用利用DMA引擎将文件内容拷贝到内核缓冲区去,然后将带有文件位置和长度信息的缓冲区描述符添加socket缓冲区去,这一步不会将内核中的数据拷贝到socket缓冲区中,DMA引擎会将内核缓冲区的数据拷贝到协议引擎中去,避免了最后一次拷贝。



参考:jianshu.com/p/fad3339e3448

总结一下:

1.大量使用操作系统页缓存,内存操作速度快且命中率高.
2.Kafka 不直接参与物理内存I/O操作,而是交给最擅长此事的操作系统来完成.
3.采用追加文件的方式,摒弃了缓慢的磁盘随机读/写操作.
4.使用以 sendfile 为代表的零拷贝技术加强网络间的数据传输效率.

Kafka 实现负载均衡是用过智能化的分区领导者选举来实现的.

Kafka 采用会话机制实现故障转移.每台Kafka 服务器启动后会以会话的形式把自己注册到 Zookeeper 服务器上,一旦该服务器出现问题,与 Zookeeper 的会话便不能维持从而超时失效,此时 Kafka 集群会选举出另一台服务器来完全代替这台服务器继续提供服务.

Kafka 基本概念

broker——Kafka服务器

Kafka 的消息设计:
消息头部(CRC、版本号、属性、时间戳、键长度、消息体长度)   key    value
key:消息键,对消息做 partition 时使用,即决定消息保存在某 topic 下的那个 partition.
value: 消息体,保存实际的消息数据.
Timestramp: 消息发送时间戳


topic-partition-message 三级结构,Kafka 的 partition 是不可修改的有序消息序列. 每个 partition 有自己的专属的 partition 号,通常是从 0 开始的. 用户对 partition 唯一能做的操作就是在消息序列的尾部追加消息.partition 上的每条消息都会被分配一个唯一的序列号(也就是偏移量 offset). 该位移值是从 0 开始递增的.

replica 副本,存在的意义就是防止数据丢失. 副本分为两类,领导者副本(leader)和追随者副本(follower). 追随者副本是不能提供服务给客户端的,它只被动的向领导者副本获取数据,而一旦领导者副本宕机,则会从剩余的副本中选举出新的 leader 继续提供服务.

Kafka 保证同一个 partition 的多个 replica 一定不会分配在同一台 broker 上.

ISR: in-sync replica,与领导者副本保持同步的 replica 集合.

Kafka 为 partition 动态维护一个 replica 集合. 该集合中的所有 replica 保存的消息日志都与 leader replica 保持同步状态. 只有这个集合中的 replica 才能被选举为 leader,也只有该集合中所有 replica 都接收到了同一条消息,Kafka 才会将消息设置为已提交状态,即认为该消息发送成功.

Kafka 对没有提交成功的消息不做任何交付保证,它只保证在 ISR 存活的情况下”已提交“的消息不会丢失.

正常情况下,partition 的所有 replica 都在 ISR 中,但是由于种种原因,有一部分 replica 落后于 leader replica 的进度,当滞后到一定程度的时候,Kafka 会将这些 replica 踢出 ISR,当这些 replica 重新追上 leader replica 的进度时,Kafka 会将它们重新加入到 ISR 中.
0
2
分享到:
评论

相关推荐

    面试官:Kafka是什么,它有什么特性与使用场景?.doc

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以支持分区,基于 Zookeeper 协调的分布式消息系统。 一、Kafka 的基本概念 Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以支持分区,基于 Zookeeper ...

    kafka 2.10-0.9.0.1 源码

    在深入探讨 Kafka 的源码之前,先来理解 Kafka 是什么。Kafka 是一个分布式流处理平台,由 LinkedIn 开发并在 Apache 软件基金会下开源。它主要用于实时数据流处理和消息传递,具有高吞吐量、低延迟和容错性等特点。...

    kafka的安装包

    **Kafka是什么** Kafka是一种高吞吐量、分布式的发布订阅消息系统,由LinkedIn开发并开源,后来成为Apache软件基金会的顶级项目。Kafka设计目标是提供一个高可用、高性能、可伸缩的消息中间件,它允许应用程序通过...

    kafka 插件kafka 插件kafka 插件

    **Kafka插件详解** Kafka插件是Apache Kafka与各种工具集成的重要组成部分,它使得开发者和运维人员能够更方便地在不同的系统中利用Kafka的功能。Kafka是一款分布式流处理平台,常用于构建实时数据管道和流应用,...

    kafkatool 连接kafka工具

    **Kafka Tool 连接 Kafka 工具详解** 在大数据处理和实时流处理领域,Apache Kafka 是一个不可或缺的组件,它作为一个分布式的消息中间件,提供高效、可扩展且可靠的发布订阅服务。为了方便管理和操作 Kafka 集群,...

    Kafka面试题.zip

    1. **Kafka是什么?** Kafka是一个高吞吐量、低延迟的分布式发布订阅消息系统,最初由LinkedIn开发并开源,现在是Apache软件基金会的顶级项目。它提供了一个持久化、可扩展且容错的消息中间件,支持实时数据流处理...

    尚硅谷大数据技术之 Kafka1

    【尚硅谷大数据技术之 Kafka1】章节主要涵盖了Kafka的基础概念和消息队列的基本原理,以及为什么需要使用消息队列。以下是对这些知识点的详细解释: 1. **Kafka是什么**: Kafka是一个分布式流处理平台,最初由...

    kafka-java-demo_java连接卡夫卡_steamyx8_DEMO_kafka_breathsru_

    首先,我们需要了解Kafka是什么。Kafka是一款分布式流处理平台,用于构建实时数据管道和流应用。它具有高吞吐量、低延迟以及容错性等特点,广泛应用于大数据领域。在Java环境中,我们通常使用Kafka的官方Java客户端...

    Kafka管理工具Kafka Tool

    **Kafka Tool:高效管理Apache Kafka集群的利器** Apache Kafka是一个分布式的流处理平台,广泛应用于大数据实时处理、日志聚合、消息系统等多个领域。在Kafka的实际操作中,管理和监控集群是至关重要的任务,而...

    Kafka实例Kafka实例

    在IT行业中,Kafka是一个非常重要的分布式流处理平台,由LinkedIn开发并贡献给了Apache软件基金会。Kafka实例是实现大规模实时数据处理的关键组件,广泛应用于日志聚合、流数据分析、消息传递等多个领域。本篇文章将...

    jdk1.8+kafka3.2 linux版本

    在IT行业中,构建高效的数据流处理系统是至关重要的,而Apache Kafka作为一个分布式流处理平台,被广泛应用在大数据领域。本文将详细阐述如何在Linux环境下利用JDK 1.8和Kafka 3.2来搭建一个稳定的Kafka环境。 首先...

    kafka kafka kafka kafka kafka

    Kafka 概述与架构 Kafka 是一种流行的消息队列系统,广泛应用于构建实时数据管道和流媒体应用程序。它具有水平扩展、容错、高速运行等特点,已经在数千家公司的生产环境中运行。 架构概述 Kafka 的架构主要由三个...

    5、kafka监控工具Kafka-Eagle介绍及使用

    Apache Kafka 是一个分布式流处理平台,常用于构建实时的数据管道和应用。Kafka 提供了高吞吐量、低延迟的消息传递能力,是大数据领域中重要的消息队列(MQ)解决方案。Kafka-Eagle 是针对 Kafka 集群设计的一款高效...

    Kafka详细课程讲义

    1. Kafka的主要应用场景是什么? 2. Kafka如何保证消息的顺序性? 3. 解释Kafka的ISR(In-Sync Replicas)机制。 4. Kafka的消费模型是什么样的? 5. 如何处理Kafka的消费者挂掉或新消费者加入的情况? 通过学习...

    kafka-java-demo 基于java的kafka生产消费者示例

    【Kafka基础知识】 Kafka是由Apache开发的分布式流处理平台,它主要被设计用来处理实时数据流。在大数据处理领域,Kafka常被用于构建实时数据管道和流应用,能够高效地处理大量的实时数据。 【Java与Kafka的结合】...

    Kafka Tool linux版本,适用于kafka0.11及以上

    **Kafka Tool for Linux: 管理与使用Apache Kafka集群的高效工具** Apache Kafka是一款分布式流处理平台,常用于构建实时数据管道和流应用。Kafka Tool是针对Kafka集群进行管理和操作的一款图形用户界面(GUI)工具...

    Kafka尚硅谷.rar

    **Kafka概述** Kafka是由LinkedIn开发并贡献给Apache软件基金会的一个开源消息系统,它是一个高性能、可扩展的分布式消息中间件。Kafka最初设计的目标是处理网站活动流数据,但随着时间的发展,它已被广泛应用于...

    Kafka技术内幕:图文详解Kafka源码设计与实现+书签.pdf+源码

    《Kafka技术内幕:图文详解Kafka源码设计与实现》是一本深入解析Apache Kafka的专著,旨在帮助读者理解Kafka的核心设计理念、内部机制以及源码实现。这本书结合图文并茂的方式,使得复杂的概念变得更为易懂。同时,...

    华为kafka.zip

    在IT领域,特别是大数据处理和实时流计算方面,华为kafka和zookeeper是两个非常关键的组件。华为kafka是华为公司对开源Apache Kafka的定制版本,它在原生Kafka的基础上进行了优化和增强,以适应华为云环境和服务的...

Global site tag (gtag.js) - Google Analytics