当前位置: 首页 > 后端技术 > Java

ApacheKafkaTutorial--KafkaBeginner

时间:2023-04-01 19:37:11 Java

ApacheKafkaTutorial-KafkaBeginnerKafkaAssistant是一款KafkaGUI管理工具-管理Broker,Topic,Group,查看消费明细,监控服务器状态,支持多种消息格式。[TOC]总结今天,我们开始了新的旅程,即ApacheKafkaTutorial。在本Kafka教程中,我们将了解什么是Kafka、ApacheKafka的历史以及为什么使用Kafka。此外,我们还将了解Kafka架构、Kafka组件和Kafka分区。此外,我们将讨论Kafka的各种比较和Kafka的用例。除此之外,我们将在本Kafka教程中看到各种术语,如KafkaBroker、KafkaCluster、KafkaConsumer、KafkaTopics等。那么,让我们开始学习ApacheKafka教程。什么是卡夫卡?在使用基于消息的主题实现生产者和消费者之间的通信时,我们使用ApacheKafka。ApacheKafka是一种快速、可扩展、容错的发布-订阅消息传递系统。基本上,它为高端的下一代分布式应用程序设计了一个平台。同时,它允许大量的永久或临时消费者。Kafka最好的特性之一是它对节点故障具有高可用性和弹性,并支持自动恢复。这一特性使得ApacheKafka成为现实世界数据系统中大规模数据系统组件之间理想的通信和集成工具。此外,该技术取代了传统的消息代理,可以像JMS、AMQP等一样提供更高的吞吐量、可靠性和复制性。此外,Kafka提供了一个KafkaBroker、一个KafkaProducer和一个KafkaConsumer。KafkaBroker是Kafka集群上的一个节点,其作用是持久化和复制数据。Kafka生产者将消息推送到称为Kafka主题的消息容器中。Kafka消费者从Kafka主题中提取消息。在继续学习Kafka教程之前,让我们了解Kafka中的消息系统一词的实际含义。Kafka中的消息系统当我们将数据从一个应用程序传输到另一个应用程序时,我们使用消息系统。事实证明,应用程序无需担心如何共享数据,只需专注于数据即可。分布式消息传递建立在可靠的消息队列之上。虽然,消息在客户端应用程序和消息系统之间异步排队。有两种类型的消息传递模式,点对点和发布-订阅(pub-sub)消息传递系统。但是,大多数消息传递模式都遵循发布-订阅。点对点消息传递系统在这里,消息保存在队列中。虽然,一条特定的消息最多只能被一个消费者消费,即使一个或多个消费者可以订阅队列中的消息。同时保证一旦某个消费者读取了队列中的一条消息,它就从队列中消失。发布-订阅消息系统在这里,消息被保存在一个主题中。在这个系统中,Kafka消费者可以订阅一个或多个主题并消费该主题中的所有消息。另外,消息生产者是指发布者,消息消费者是指订阅者。ApacheKafka的历史此前,LinkedIn面临着将网站上的大量数据以低延迟输入到能够处理实时事件的lambda架构中的问题。作为解决方案,ApacheKafka是在2010年开发的,因为之前没有解决方案可以解决这个问题。然而,有一些技术可用于批处理,但这些技术的部署细节与下游用户共享。因此,这些技术不适用于实时处理。然后,在2011年,Kafka开源了。为什么要使用ApacheKafka集群?我们都知道大数据中有海量的数据。而且,当涉及到大数据时,存在两个主要挑战。一是收集大量数据,二是对收集到的数据进行分析。因此,为了克服这些挑战,我们需要一个消息系统。ApacheKafka已经证明了它的实用性。ApacheKafka有很多好处,例如:通过存储/发送实时进程的事件来跟踪网络活动。关于业务指标的警报和报告。将数据转换为标准格式。持续处理流数据。因此,由于其广泛使用,这项技术正在与一些最流行的应用程序(如ActiveMQ、RabbitMQ、AWS等)展开激烈竞争。Kafka教程-先决条件在继续学习ApacheKafka教程之前,您必须对Java有很好的理解和Linux环境。Kafka架构下面我们将讨论本ApacheKafka教程中的四个核心API。KafkaProducerAPIKafkaProducerAPI允许应用程序向一个或多个Kafka主题发布消息。KafkaConsumerAPI为了订阅一个或多个主题并处理应用程序中生成的消息,我们使用这个KafkaConsumerAPI。为了充当流处理器,KafkaStreamsAPI消费来自一个或多个主题的输入流,为一个或多个输出主题生成输出流,并有效地将输入流转换为输出流。这个KafkaStreamsAPI为应用程序提供了便利。Kafka连接器APIKafka连接器API允许构建和运行可重用的生产者或消费者,以将Kafka主题连接到现有应用程序或数据系统。例如,关系数据库的连接器可能会捕获表的每个更改。Kafka组件Kafka使用以下组件实现消息传递。KafkaTopic基本上,消息的集合就是一个Topic。此外,我们还可以复制和划分Topic。这里replication是复制,partitioning是分区。此外,将它们视为日志,Kafka在其中存储消息。然而,这种复制和分区主题的能力是启用Kafka的容错性和可扩展性的因素之一。Kafka生产者向Kafka主题发布消息。KafkaConsumer该组件订阅一个主题,读取并处理来自该主题的消息。KafkaBrokerKafkaBroker管理主题中的消息存储。如果Kafka有多个Broker,这就是我们所说的Kafka集群。KafkaZookeeper为了向Broker提供有关系统中运行的进程的元数据,并方便进行健康检查和Broker领导层的选举,Kafka使用了Kafkazookeeper。Kafka教程-日志剖析在本Kafka教程中,我们将日志视为一个分区。基本上,数据源将消息写入日志。其中一个好处是,在任何时候,一个或多个消费者正在阅读他们选择的日志。在这里,下图显示了数据源正在写入日志,而消费者正在不同的偏移点读取日志。Kafka教程-数据记录使用Kafka,消息会保留相当长的时间。而且,消费者可以根据自己的方便阅读。但是如果Kafka配置了24小时保留消息,消费者宕机时间超过24小时,消费者就会丢失消息。而且,如果消费者的停机时间只有60分钟,则可以从上次已知的偏移量开始读取消息。Kafka不会保留消费者从主题中读取的内容的状态。消费者向名为__consumer_offset的主题发送消息,其中包含每个分区的偏移量。如果消费者一直在运行,那么偏移量就没有用了。但是,如果一个消费者崩溃了或者一个新的消费者加入了这个组,就会触发重新平衡。重新平衡完成后,可能会为每个消费者分配一个新分区,而不是之前读取的分区。为了能够继续之前的工作,消费者需要读取每个分区最后提交的offset,然后从offset指定的位置继续读取消息。Kafka教程-Kafka分区每个KafkaBroker都有几个分区。此外,每个分区可以是主题的领导者或副本。此外,当副本用新数据更新时,领导者负责对主题的所有写入和读取。如果领导者以某种方式失败,副本将接替成为新的领导者。Java在ApacheKafka中的重要性ApacheKafka是用纯Java编写的,Kafka的原生API也是java。不过,很多其他语言如C++、Python、.Net、Go等也支持Kafka。然而,一种不需要使用第三方库的平台是Java。此外,我们可以说用Java以外的语言编写代码会有一点开销。另外,如果我们需要在Kafka上达到标准的高处理速度,我们可以使用Java语言。同时,Java为Kafka消费者客户端提供了良好的社区支持。因此,用Java实现Kafka是一个正确的选择。Kafka用例Kafka的几个用例说明了我们实际使用ApacheKafka的原因。消息代理对于更传统的消息代理,Kafka可以是一个很好的替代品。可以说,Kafka具有更好的吞吐量、内置的分区、复制和容错能力,这使其成为大规模消息处理应用程序的良好解决方案。运营监控对于运营监控数据,Kafka找到了很好的应用。它涉及聚合来自分布式应用程序的统计数据,以生成集中的运营数据提要。事件溯源因为它支持非常大的存储日志数据,这意味着Kafka是事件溯源应用程序的优秀后端。Kafka教程-Kafka的比较许多应用程序提供与Kafka相同的功能,例如ActiveMQ、RabbitMQ、ApacheFlume、Storm和Spark。那么为什么要选择ApacheKafka而不是其他的呢?让我们看看下面的比较。ApacheKafka和ApacheFlume比较工具类型ApacheKafka-它是用于多个生产者和消费者的通用工具。ApacheFlum-对于特定的应用程序,它是一种特殊用途的工具。复制功能ApacheKafka-使用摄取管道来复制事件。ApacheFlum-它不复制事件。RabbitMQ与ApacheKafka最重要的ApacheKafka替代品之一是RabbitMQ。那么让我们看看它们之间有什么区别。ApacheKafka的特点-基本上,Kafka是分布式的。同时,在确保持久性和可用性的同时共享和复制数据。RabbitMQ-它对这些功能的支持相对较少。性能ApacheKafka-它的性能非常高,达到100,000条消息/秒的水平。RabbitMQ-而RabbitMQ的性能速率约为20,000条消息/秒。ProcessingwithApacheKafka-它允许对日志进行可靠的分布式处理。此外,流处理语义内置于KafkaStreams中。RabbitMQ-在这里,消费者只是基于FIFO,从HEAD读取并一个一个地处理它们。与ApacheKafkaInformation相比,传统的消息队列系统仍然是传统的队列系统——大多数队列系统通常会在处理完消息后从队列末尾移除消息。ApacheKafka-在这里,消息在处理后仍然存在。当消费者收到它们时,它们不会被删除。基于逻辑的处理传统的排队系统——不允许基于消息或事件等事物的逻辑处理。ApacheKafka-它允许基于相似的消息或事件处理逻辑。所以,这就是关于ApacheKafka教程的全部内容。希望你喜欢我们的解释。参考:ApacheKafka教程—Kafka初学者