- 引言
在Apache Kafka中传输消息时,客户端和服务器约定使用一种共同的语法格式。Apache Kafka提供了默认的转换器(例如_String_和_Long_),但同时也支持特定用例的自定义序列化器。在本教程中,我们将看到如何实现它们。
序列化是将对象转换为字节的过程。反序列化是相反的过程——将字节流转换为对象。简而言之,它将内容转换为可读和可解释的信息。
正如我们所提到的,Apache Kafka为几种基本类型提供了预构建的序列化器和反序列化器,并允许我们实现自定义序列化器:
在Apache Kafka中传输消息时,客户端和服务器约定使用一种共同的语法格式。Apache Kafka提供了默认的转换器(例如_String_和_Long_),但同时也支持特定用例的自定义序列化器。在本教程中,我们将看到如何实现它们。
序列化是将对象转换为字节的过程。反序列化是相反的过程——将字节流转换为对象。简而言之,它将内容转换为可读和可解释的信息。
正如我们所提到的,Apache Kafka为几种基本类型提供了预构建的序列化器和反序列化器,并允许我们实现自定义序列化器:
Apache Kafka是一个开源的分布式事件流平台。
在这个快速教程中,我们将学习获取Kafka主题中消息数量的技术。我们将展示程序化以及原生命令技术。
Kafka主题可能有多个分区。我们的技术应该确保我们计算了每个分区中的消息数量。
**我们必须逐个检查每个分区的最新偏移量。**为此,我们将引入一个消费者:
KafkaConsumer``<String, String>`` consumer = new KafkaConsumer``<String, String>``(props);
在本教程中,我们将阐明Apache Kafka中GroupId和ConsumerId的区别,这对于正确设置消费者至关重要。此外,我们还将讨论ClientId与ConsumerId的区别以及它们之间的关联。
在探讨Apache Kafka中标识符类型的区别之前,让我们先了解消费者组。
消费者组由多个协同工作以从一个或多个主题中消费消息的消费者组成,实现并行消息处理。它们在分布式Kafka环境中实现了可扩展性、容错性和高效的消息并行处理。
关键的是,组内的每个消费者只负责处理其主题的一个子集,即分区。
无论你是刚开始还是拥有多年经验,Spring Boot显然是构建Web应用程序的不错选择。
Jmix建立在这个非常强大和成熟的Boot堆栈之上,允许开发人员构建并交付全栈Web****应用程序,而无需编写前端代码。也非常灵活,从简单的Web GUI CRUD应用程序到复杂的企业解决方案。
具体来说,Jmix平台包括一个构建在Spring Boot, JPA和Vaadin之上的框架,并附带Jmix Studio,这是一个IntelliJ IDEA插件,配备了一套开发人员生产力工具。
在本教程中,我们将学习Kafka的基础知识——任何人都应该了解的用例和核心概念。之后,我们可以找到并理解关于Kafka的更详细文章。
Kafka是由Apache软件基金会开发的开源流处理平台。我们可以用它作为消息系统来解耦消息生产者和消费者,但与ActiveMQ等“传统”消息系统相比,它旨在处理实时数据流,并为数据的加工和存储提供分布式、容错和高度可扩展的架构。
因此,我们可以用它在各种用例中:
在本简短教程中,我们将看到如何从Apache Kafka主题中检索最后N条消息。
在文章的第一部分,我们将关注执行此操作所需的先决条件。在第二部分,我们将使用Kafka Java API库构建一个小型实用程序来使用Java读取消息。最后,我们将提供简短的指导,以使用KafkaCat从命令行实现相同的结果。
从Kafka主题检索最后N条消息就像从明确定义的偏移量开始消费消息一样简单。 Kafka主题中的偏移量表示消费者的当前位置。在之前的文章中,我们已经看到如何利用_consumer.seekToEnd()_方法从一个Apache Kafka主题中获取特定数量的消息。
在分布式架构中,应用程序通常需要在彼此之间交换数据。一方面,这可以通过直接通信来实现。另一方面,为了实现高可用性和分区容错性,并使应用程序之间的耦合度降低,消息传递是一个合适的解决方案。
因此,我们可以选择多种产品。Apache 基金会提供了 ActiveMQ 和 Kafka,我们将在本文中对它们进行比较。
ActiveMQ 是一种传统的消息代理,其目标是确保应用程序之间以安全和可靠的方式交换数据。 它处理的数据量较小,因此专门用于定义良好的消息格式和事务性消息传递。