kafka是一个分布式的,高吞吐量的、信息分片存储,消息同步复制的开源消息服务,它提供了消息系统的功能,但是采用了独特的设计。
kafka最初由LinkedIn设计开发,使用Scala语言编写,用作LinkedIn网站的活动流数据和运营数据处理工具,这其中活动流数据是指页面访问量、被查看内容方面的信息以及搜索情况等内容,运营数据是指服务器的性能数据(CPU、IO使用率、请求时间、服务日志等数据)。
现在kafka已被多家不同类型的公司采用,作为其内部各种数据的处理工具或消息队列服务。如今kafka捐献给了apache软件基金组织,成为apache下的一个开源项目。
下面我们来温习一下消息系统的基本要素:
1、topic:kafka维护的一个叫topic的消息主题;
2、producer:我们将消息发布到kafka的topic上,发布消息的进程也叫生产者producer;
3、consumer:我们从kafka的topic上订阅消息,订阅消息的进程叫消费者consumer;
4、broker:kafka运行在由一个或多个服务器构成的集群上,集群中的每一台服务器被称为broker。(broker的意思为:经纪人、居间人、代理人)
所以从宏观上来看,生产者(producer)通过网络发布消息到kafka集群(cluster),kafka集群再为消费者(consumer)提供消息服务,他们的处理流程如下图所示:
生产者、消费者与kafka的broker服务器之间通过TCP协议通信。kafka提供了多种语言客户端Java、C/C++、Python、php、ruby、.net、scala、erlang等,用于与kafka交互。
我们将消息的发布(publish)叫做生产者producer,将消息的订阅(subscribe)叫做消费者consumer,将中间的存储服务叫做broker,这个broker就是我们的kafka服务器,生产者通过推模式将数据推到kafka服务器broker,消费者通过拉模式从kafka服务器broker拉取数据,它们如下图所示:
需要注意的是,消费者是自己主动从broker拉取数据,而broker不会主动把数据发送到消费者。
对于在实际应用中,生产者、消费者和kafka的broker一般集群部署,多个producer、consumer和broker之间协同合作,通过zookeeper协调管理,构成了一个高性能的分布式消息发布与订阅系统,在一个集群中,它们的结构如下图所示:
构成的整个分布式消息系统将按照如下的流程运行:
1、启动zookeeper
2、启动kafka的broker
3、编写客户端Producer生产数据,通过zookeeper找到broker,然后将数据存入broker
4、编写客户端Consumer消费数据,通过zookeeper找对应的broker,然后从broker消费消息。
以上我们对kafka有了一个概括性的描述,让我们从宏观上认识了kafka是什么以及其基本工作原理,接下来我们再详细看看kafka涉及到的几个主要要素都有些什么特点:
Topic,高级别抽象的kafka提供者,一个topic是一个目录或消息名,消息将被发送到topic,对于每个topic,kafka维持一个分片日志(partitioned log),如下图所示为一个topic的解剖图:
每一个分片日志都是有序的、不可变的消息系列,新的消息不断地添加到分片日志的末尾,在这个分片日志中,每个消息被分配一个连续的id号叫offset,它唯一地定义了一个消息。
在一个配置的时间内,kafka集群一直保留着所有发布的消息,不管这些消息有没有被消费。比如被设置保留两天,那么一个消息被发布后的两天时间内,消息都是可以被消费的,两天之后消息将被丢弃以释放空间。
kafka中进行partitions设计有多个原因,首先,通过partition可以使log文件的大小不会超过单台机器的文件容量限制,一个topic可以有多个partitions,因此可以存储任意数量的数据。其次,可以提升并发消费的能力,一个topic的partitions可以被分布在kafka集群中的多台机器上,每台机器上的kafka实例负责该机器上分片数据的请求和操作,每个分片可以配置被复制的份数,从而复制到集群中的其他机器上,以提升高可用性。
每个partition有一个server作为leader,0个或者多个server作为followers,leader处理所有的读写请求,followers复制leader进行消息同步,如果一个leader发生故障,followers中会自动有一个follower变成新的leader。
生产者把消息发送到他们选择的topics中,producers还能指定发送到topic的哪个partition中,你可以通过round-robin或者其他算法来决定把消息发送到哪个partition中。
传统的消息系统有两种模式:
一种是基于队列Queue的点对点消息。
一种是基于主题Topic的发布与订阅消息。
基于队列的点对点消息只能被一个消费者消费,而基于主题的发布与订阅消息能被多个消费者消费。kafka抽象了这两种模式,它采用consumer group名称来处理这两种模式,可以将消费者分成多个group,每个consumer属于一个单独的consumer group,也可以多个consumer属于同一个group。
如果采用基于队列的点对点消息,则每个消费者都需要位于同一个group中,如果采用基于主题的发布订阅消息,则每个消费者都要位于不同的group中。
在更多的情况下,我们的主题topic中会包含几个consumer group,每个consumer group都是一个logical subscribe,每个group包含了多个consumer实例,这样更具扩展性和容错性。kafka有比传统消息系统更强健的订阅机制。
kafka在较高的层次上提供了如下保证:
1、生产者producer发送到topic partition中的消息会被顺序的追加到日志中;
2、消费者consumer消费消息的顺序和消息在日志中的顺序一致;
3、如果一个topic有N份复制,则我们可以允许N-1台服务故障而不会丢失任何消息。
kafka的一些常用应用场景:
1、消息系统:替换传统的消息系统,解耦系统或缓存待处理的数据,kafka有更好的吞吐量,内置了分片、复制、容错机制,是大规模数据消息处理的更好的解决方案。
2、网站活动跟踪:网站的访问量,搜索量,或者其他用户的活动行为如注册,充值,支付,购买等行为可以发布到中心的topic,每种类型可以作为一个topic,这些信息流可以被消费者订阅实时处理、实时监控或者将数据流加载到Hadoop中进行离线处理等。
3、度量统计:可以用于度量统计一些运维监控数据,将分布式的一些监控数据聚集到一起。
4、日志聚合:可以作为一个日志聚合的替换方案,如Scribe、Flume。
5、数据流处理:可以对数据进行分级处理,将从kafka获取的原始数据进行加工润色后再发布至kafka。
6、事件溯源:可以以时间为顺序记录应用事件的状态变化,从而为事件溯源。
7、提交日志:可以作为分布式系统的外部日志存储介质。
当然也许还可以以其他方式更加巧妙地使用kafka。
一个Java技术交流群,一起交流,共同进步,扣扣群号:513086638
微信公众平台:
相关推荐
它提供了一个高吞吐量、低延迟的消息传递系统,可以处理大量实时数据。 2. **Kafka-clients**: Kafka-clients是Kafka的核心组件之一,它提供了与Kafka集群通信的接口。包括生产者客户端(Producer API)和消费者...
Kafka 提供了高吞吐量、低延迟的消息传递能力,是大数据领域中重要的消息队列(MQ)解决方案。Kafka-Eagle 是针对 Kafka 集群设计的一款高效、易用的监控工具,旨在提供对 Kafka 的深度监控和管理。 Kafka-Eagle 的...
Apache Kafka是一种分布式流处理平台,广泛应用于大数据实时处理、日志收集、消息队列等场景。它提供了高吞吐量、低延迟的消息传递能力,支持发布/订阅模式和队列模型,是大规模数据处理的基础设施。 **2. SBT介绍*...
Kafka 是一款高性能的分布式消息中间件,由 Scala 编写,主要特点是高吞吐量、持久化和可扩展性。Kafka 不是严格遵循 JMS 规范,但借鉴了其思想,提供了消息发布订阅功能。在 Kafka 中,消息以 Topic 形式组织,每个...
KAFKA是一个高吞吐量的分布式消息系统,由LinkedIn开发并开源,现在是Apache软件基金会的顶级项目。它主要设计用于处理实时流数据,允许应用程序发布和订阅消息,同时提供了一个可扩展且容错的数据总线。本文将详细...
《深入理解Kafka:分布式消息系统的精髓》 Kafka,由LinkedIn开发并开源,是一款高性能、分布式的流处理平台,其设计目标是处理海量实时数据。它的核心特性是能够以高吞吐量进行消息的发布与订阅,同时保证数据的...
Kafka Eagle是一款针对Apache Kafka设计的高性能、用户友好的管理和监控工具。它的版本2.0.8提供了更加强大和稳定的特性,以帮助管理员更好地监控和管理Kafka集群。在深入探讨这个版本之前,我们先来了解一下Kafka。...
首先,Kafka是一种分布式流处理平台,广泛应用于大数据实时处理、消息传递等领域。然而,随着Kafka集群规模的扩大,管理和监控任务变得日益复杂,这就需要一款强大的管理工具,Kafka-Manager应运而生。最新版本kafka...
10. **性能**:Kafka能够处理每秒数十万条消息,使其成为实时大数据处理的理想选择。 为了充分利用Kafka,你需要熟悉其配置选项,理解如何调整参数以适应不同的场景,同时确保集群的稳定性和性能。此外,监控和日志...
Kafka是一款高吞吐量、分布式的发布/订阅消息系统,广泛应用于大数据处理和实时流数据平台。然而,随着集群规模的增长,手动管理Kafka节点和主题变得日益困难,这就催生了Kafka-Manager的诞生。Kafka-Manager 1.3....
《Kafka 2.12-3.6.1在Linux...然而,真正实现高可用、高性能的Kafka集群还需要深入理解和调整其内部参数,以及合理规划数据存储和网络通信策略。希望这篇指南能为你提供一个良好的起点,让你在Kafka的世界里游刃有余。
Kafka是一个分布式流处理平台,常用于实时数据管道和流应用构建,具有高吞吐量、容错性好以及可扩展性强的特点。 Kafka Manager 2.0.0.2是该工具的一个特定版本,它包含了经过编译的二进制文件,可以直接部署和使用...
在大数据处理领域,Apache Kafka作为一个高效、可扩展且容错性强的分布式消息系统,广泛应用于实时数据流处理。然而,随着Kafka集群的规模扩大,管理和监控Kafka变得日益复杂。这时,Kafka Manager便应运而生,它是...
Kafka作为一个高吞吐量、分布式的发布/订阅消息系统,它的核心功能包括消息生产、消息消费以及消息存储。Kafka-Manager作为其配套的管理工具,提供了诸如查看主题(topics)、管理分区(partitions)、监控消费者...
3. **元数据管理**:用户可以通过kafka-python查询Kafka集群的元数据,包括主题列表、分区信息、领导节点等,这对于理解和调试分布式系统非常有帮助。 4. **连接管理**:库自动处理网络故障和重试策略,确保与Kafka...
首先,Kafka是一个分布式流处理平台,广泛用于实时数据管道和流应用。它能够高效地处理大量的实时数据,支持发布/订阅模型,具有高吞吐量、低延迟的特性。Kafka-Manager作为Kafka的配套工具,对于管理员来说是不可或...
Apache Kafka 3.0.0 是一款强大的开源分布式事件流处理平台,它的核心特性在于提供高吞吐量、低延迟的消息传递服务。这个版本的Kafka源代码(kafka-3.0.0-src.tgz)是开发人员深入了解和定制Kafka内部机制的重要资源...
它最初设计为一个高吞吐量、低延迟的消息队列系统,但现在已发展成为能够支持实时数据流处理和分析的强大工具。Kafka的核心组件包括生产者、消费者和broker: 1. **生产者**:负责将数据发布到Kafka的主题中。这些...
Apache Kafka是一个高吞吐量、低延迟的消息传递系统,常用于构建实时数据管道和流应用。Confluent Kafka则是在Kafka基础上提供了一整套企业级解决方案,包括连接器、管理工具和KSQL(一种用于流处理的SQL语言)。而...
1. **Java运行环境**: Kafka-Eagle依赖Java,确保系统已安装JDK 1.8或更高版本。 2. **Apache Kafka**: 需要部署并运行Kafka集群,Kafka-Eagle将与其进行交互。 3. **Web服务器**: 可选,如果你打算在生产环境中部署...