Apache Kafka 简介

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(147)   2024-04-02 06:20:16

什么是Apache卡夫卡?

Apache Kafka 是一个分布式流系统,可以发布和订阅记录流。另一方面,它是企业消息传递系统。它是高度快速、水平可扩展和容错的系统。 Kafka 有四个核心 API,

生产者API:

该 API 允许客户端连接到集群中运行的 Kafka 服务器,并将记录流发布到一个或多个 Kafka 主题。

消费者API:

该 API 允许客户端连接到集群中运行的 Kafka 服务器,并使用来自一个或多个 Kafka 主题的记录流。 Kafka 消费者拉取 来自 Kafka 主题的消息。

流 API:

此 API 允许客户端通过使用来自一个或多个主题的流并将流生成到其他输出主题来充当流处理器。这允许转换输入和输出流。

连接器 API:

此 API 允许编写可重用的生产者和消费者代码。例如,如果我们想从任何 RDBMS 中读取数据以将数据发布到主题并使用来自主题的数据并将其写入 RDBMS。使用连接器 API,我们可以为各种数据源创建可重用的源和接收器连接器组件。

Kafka 用于哪些用例?

Kafka 用于以下用例,

消息系统:

Kafka 用作企业消息系统,将源系统和目标系统解耦以交换数据。与 JMS 相比,Kafka 通过分区提供高吞吐量,通过复制提供容错能力。

网络活动跟踪:

跟踪网站上的用户旅程事件以进行分析和离线数据处理。

日志聚合:

处理来自各种系统的日志。特别是在分布式环境中,具有微服务架构,其中系统部署在各种主机上。我们需要聚合来自各种系统的日志,并将日志放在一个集中的地方进行分析。阅读有关使用 Kafka 的分布式日志记录架构的文章 https://smarttechie.org/2017/07/31/distributed-logging-architecture-for-micro-services/

指标收集器:

Kafka 用于从各种系统和网络收集指标以进行操作监控。有 Kafka metrics reporters 可用于监控工具,例如 Ganglia、Graphite 等……

关于这个 https://github.com/stealthly/metrics-kafka 的一些参考

什么是经纪人?

Kafka 集群中的实例称为代理。在 Kafka 集群中,如果您连接到任何一个代理,您将能够访问整个集群。我们连接到访问集群的代理实例也称为引导服务器。每个代理都由集群中的数字 id 标识。从 Kafka 集群开始,三个代理是一个不错的数字。但是有些集群中有数百个代理。

什么是主题?

主题是记录发布到的逻辑名称。在内部,主题被划分为数据发布到的分区。这些分区分布在集群中的代理上。例如,如果一个主题有 3 个分区,集群中有 3 个代理,每个代理有一个分区。发布到分区的数据仅附加偏移量增量。

以下是我们在使用分区时需要记住的两点。

  • 主题由其名称标识。我们可以在一个集群中有很多主题。
  • 消息的顺序在分区级别维护,而不是跨主题。
  • 一旦写入分区的数据未被覆盖。这称为不变性。
  • 分区中的消息使用键、值和时间戳存储。 Kafka 确保将消息发布到给定密钥的同一分区。
  • 在 Kafka 集群中,每个分区都有一个领导者,负责对该分区进行读/写操作。

在上面的示例中,我创建了一个包含三个分区且复制因子为 3 的主题。在这种情况下,由于集群有 3 个代理,因此三个分区均匀分布,每个分区的副本被复制到另外 2 个代理。由于复制因子为 3,因此即使 2 个代理宕机也不会丢失数据。始终保持复制因子大于 1 且小于或等于集群中的代理数。您不能创建复制因子超过集群中代理数量的主题。

在上图中,每个分区都有一个领导者(发光分区),其他同步副本(灰色分区)是跟随者。对于分区 0,broker-1 是领导者,broker-2、broker-3 是追随者。对分区 0 的所有读/写操作都将转到 broker-1,并将同样的内容复制到 broker-2 和 broker-3。

现在让我们按照以下步骤创建具有 3 个代理的 Kafka 集群。

第1步:

下载 Apache Kafka 最新版本。在此示例中,我使用的是最新的 1.0。提取文件夹并移动到 bin 文件夹中。启动 Zookeeper,这是启动 Kafka 集群所必需的。 Zookeeper 是管理代理、分区领导者选举以及在主题(删除主题、创建主题等)或代理(添加代理、代理死亡等)更改期间提醒 Kafka 的协调服务。在这个例子中,我只启动了一个 Zookeeper 实例。在生产环境中,我们应该有更多的 Zookeeper 实例来管理故障转移。 没有 Zookeeper Kafka 集群就无法工作。

./zookeeper-server-start.sh ../config/zookeeper.properties

第2步:

现在启动 Kafka 经纪人。在这个例子中,我们将启动三个代理。进入Kafka根目录下的config文件夹,复制server.properties文件3次,分别命名为server_1.properties、server_2.properties和server_3.properties。更改这些文件中的以下属性。

#####server_1.properties#####
broker.id=1
listeners=PLAINTEXT://:9091
log.dirs=/tmp/kafka-logs-1

#####server_2.properties######
broker.id=2
listeners=PLAINTEXT://:9092
log.dirs=/tmp/kafka-logs-2

######server_3.properties#####
broker.id=3
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs-3M

现在使用以下命令运行 3 个代理。

###Start Broker 1 #######
./kafka-server-start.sh ../config/server_1.properties

###Start Broker 2 #######
./kafka-server-start.sh ../config/server_2.properties

###Start Broker 3 #######
./kafka-server-start.sh ../config/server_3.properties

第 3 步:

使用以下命令创建主题。

./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 3 --topic first_topic

第四步:

使用 Kafka console producer 向在上述步骤中创建的主题生成一些消息。对于控制台生产者,请提及任何一个经纪人地址。这将是获得对整个集群的访问权限的引导服务器。

./kafka-console-producer.sh --broker-list localhost:9091 --topic first_topic
>First message
>Second message
>Third message
>Fourth message
>

第 5 步:

使用 Kafka 控制台消费者使用消息。对于 Kafka 消费者,提及任何一个代理地址作为引导服务器。请记住,在阅读消息时您可能看不到订单。因为顺序是在分区级别维护的,而不是在主题级别。

./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic first_topic --from-beginning

如果你愿意,你可以使用以下命令描述主题以查看分区的分布方式以及每个分区的领导者。

./kafka-topics.sh --describe --zookeeper localhost:2181 --topic first_topic

#### The Result for the above command#####
Topic:first_topic	PartitionCount:3	ReplicationFactor:3	Configs:
	Topic: first_topic	Partition: 0	Leader: 1	Replicas: 1,2,3	Isr: 1,2,3
	Topic: first_topic	Partition: 1	Leader: 2	Replicas: 2,3,1	Isr: 2,3,1
	Topic: first_topic	Partition: 2	Leader: 3	Replicas: 3,1,2	Isr: 3,1,2

在上面的描述中,broker-1 是 partition:0 的领导者,broker-1、broker-2 和 broker-3 都有每个分区的副本。

在下一篇文章中,我们将看到生产者和消费者 JAVA API。到那时,Happy Messaging!!!

标签2: Java教程
地址:https://www.cundage.com/article/jcg-introduction-apache-kafka.html

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...