- 引言
在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);
Kafka在其架构中最近从ZooKeeper转变为基于仲裁的控制器,该控制器使用一种名为Kafka Raft的新共识协议,简称为Kraft(发音为“craft”)。
在本教程中,我们将探讨Kafka做出这一决定的原因,以及这一变化如何简化其架构并使其更加强大易用。
ZooKeeper是一个提供高度可靠的分布式协调服务。它最初由Yahoo!开发,用于简化在大数据集群上运行的流程。它起初是Hadoop的一个子项目,后来在2008年成为一个独立的Apache Foundation项目。它被广泛用于大型分布式系统中的多种用例。
消费者组有助于通过允许多个消费者从同一主题读取,来创建更可扩展的Kafka应用程序。
在本教程中,我们将了解消费者组以及它们如何在消费者之间重新平衡分区。
消费者组是与一个或多个主题相关联的一组独特的消费者。每个消费者可以读取零个、一个或多个分区。此外,每个分区在给定时间只能分配给一个消费者。当组成员变化时,分区分配会发生变化。这被称为组重新平衡。
消费者组是Kafka应用程序的关键部分。这允许将类似的消费者分组,并使它们能够并行地从分区主题中读取。因此,它提高了Kafka应用程序的性能和可扩展性。
在本文中,我们将讨论在 @Transactional 块内发布消息的需求以及相关的性能挑战,例如延长的数据库连接时间。为了解决这个问题,我们将利用 Spring Modulith 的特性来监听 Spring 应用程序事件,并自动将它们发布到 Kafka 主题。
对于本文的代码示例,我们假设我们正在编写负责在 Baeldung 上保存 Article 的功能:
@Service
class Baeldung {
private final ArticleRepository articleRepository;
// 构造函数
@Transactional
public void createArticle(Article article) {
validateArticle(article);
article = addArticleTags(article);
// ...其他业务逻辑
articleRepository.save(article);
}
}
在Kafka中,消费者从分区中读取消息。在读取消息时,需要考虑一些问题,比如确定从分区中读取哪些消息,或者防止在故障情况下重复读取消息或消息丢失。解决这些问题的方案是使用偏移量。
在本教程中,我们将学习Kafka中的偏移量。我们将看到如何提交偏移量来管理消息消费,并讨论其方法和缺点。
我们知道Kafka将消息存储在主题中,每个主题可以有多个分区。每个消费者从一个主题的分区中读取消息。在这里,Kafka通过偏移量来跟踪消费者读取的消息。 偏移量是从零开始的整数,随着消息的存储而递增。
Apache Kafka是一个事件流平台,用于大规模地收集、处理、存储和集成数据。有时,我们可能希望延迟从Kafka处理消息。例如,一个客户订单处理系统设计为在X秒的延迟后处理订单,以适应这个时间框架内的取消。
在本文中,我们将使用Spring Kafka探索Kafka消息的延迟消费者处理。尽管Kafka没有提供开箱即用的延迟消费消息支持,但我们将查看实现的替代选项。
Kafka提供了多种方式来在错误时重试。我们将使用这种重试机制来延迟消费者处理消息。因此,了解Kafka重试的工作方式是值得的。
在本教程中,我们将学习Kafka的基础知识——任何人都应该了解的用例和核心概念。之后,我们可以找到并理解关于Kafka的更详细文章。
Kafka是由Apache软件基金会开发的开源流处理平台。我们可以用它作为消息系统来解耦消息生产者和消费者,但与ActiveMQ等“传统”消息系统相比,它旨在处理实时数据流,并为数据的加工和存储提供分布式、容错和高度可扩展的架构。
因此,我们可以用它在各种用例中:
在本教程中,我们将学习如何订阅Kafka消费者到多个主题。当相同的业务逻辑用于不同的主题时,这是一个常见的需求。
我们将考虑一个简单的支付系统,有两个Kafka主题,一个用于信用卡支付,另一个用于银行转账。让我们创建模型类:
public class PaymentData {
private String paymentReference;
private String type;
private BigDecimal amount;
private Currency currency;
// 标准getter和setter
}
Apache Kafka是一个开源的、容错性强、高度可扩展的流处理平台。它遵循发布-订阅架构来实时流式传输数据。我们可以通过将数据放入队列中,以非常低的延迟处理大量数据。有时,我们需要将JSON类型的数据发送到Kafka主题进行数据处理和分析。
在本教程中,我们将学习如何将JSON数据流式传输到Kafka主题。此外,我们还将了解如何为JSON数据配置Kafka生产者和消费者。
从架构上讲,Kafka支持系统中的消息流。因此,我们也可以向Kafka服务器发送JSON数据。如今,在现代应用系统中,每个应用程序主要处理JSON数据,因此以JSON格式进行通信变得非常重要。 通过以JSON格式发送数据,有助于实时跟踪用户及其在网站和应用程序上的行为。