云原生Kubernetes Apache Kafka集群的消息传递
在这篇博客中,我将介绍使用数据管道在跨网络的服务器之间建立连接的问题,以及Kafka的消息传递系统如何解决这个问题。
一个消息传递系统
在实时场景中,我们有不同的系统进程服务,它们将相互通信。数据管道是在两个服务器或两个系统之间建立连接的管道
现在让我们以一个电子商务网站为例,它有多个前端服务器,比如用于托管应用程序的成员应用服务器,它有用于客户聊天服务设施的聊天服务器,用于支付的单独服务器等。类似地,组织也可以在后端拥有多个服务器,这些服务器将根据需求接收来自不同前端服务器的消息。例如,他们可以拥有存储记录的数据库服务器、用于用户身份验证和用户授权的安全系统、实时监控服务器等。因此,随着系统数量的增加,所有这些数据管道都变得复杂起来。添加新的系统或服务器需要更多的数据管道,这将再次使数据流更加复杂。现在管理这些数据管道也变得非常困难,因为每个数据管道都有一组不同的需求。例如,处理事务的数据管道应该更具容错性和健壮性。由于这种复杂性,“消息传递系统”应运而生。消息传递系统降低了数据管道的复杂性,使系统之间的通信更加简单和易于管理。使用消息传递系统,您可以快速建立远程连接并通过网络发送数据。
让我们看看Kafka是如何解决这个问题的,Kafka解耦了数据管道,解决了复杂性问题。向Kafka发送消息的应用程序被称为“生产者”,从Kafka接收消息的应用程序被称为“消费者”。
在上图中,Web-Client、Application-1、Application-2等都在向Kafka发送消息。这些被称为生产者。然后是数据库服务器、安全系统、实时监控等,这些基本上都在消费消息,这些被称为消费者。所以生产者将消息发送给Kafka, Kafka存储这些消息,想要这些消息的消费者可以订阅和接收这些消息。
在此工作流中,多个使用者可以通过订阅来使用相同的应用服务器,添加新服务或系统以及删除现有系统也非常容易。
为什么是kafka
Apache Kafka是一个分布式的公共订阅消息系统。消息传递传统上有两种模型。也就是排队和公开订阅。在队列中,一组消费者可能从服务器读取数据,每条记录只会发送给其中的一个。而Public-Subscribe则将记录广播给所有消费者,以便多个消费者可以获得记录。
Kafka更快、可扩展、容错,因为Kafka集群是分布式的,有多台并行运行的机器。它最初是在LinkedIn上开发的,后来成为Apache基金会的一部分。
kafka的相关概念
- 主题
主题是记录被发布到的类别或数据源名称。Kafka中的主题始终是多订阅者的。这意味着一个主题可以有零个、一个或多个订阅该主题数据的消费者。
- 分区
Kafka主题被划分为多个分区。分区允许将主题数据并行拆分到多个代理(broker)中。这意味着每个分区可以放置在不同的机器上,从而允许多个消费者并行地读取主题数据。
例如,你有一个名为"sales"的主题,它有3个分区,分别是分区0、分区1和分区2。因此,总共可以有3个消费者并行地读取数据。
- 生产者
生产者将数据发布到所选择的主题上。生产者负责决定将哪条记录分配到主题的哪个分区中。
- 消费者
消费者通过消费者组名称进行标识,每个发布到主题的记录都会被传递给每个订阅的消费者组中的一个消费者实例。消费者实例可以位于单独的进程或不同的机器上。
- 代理(Broker)
Kafka集群是一组服务器,每个服务器称为代理(broker)。
- ZooKeeper
ZooKeeper是另一个Apache开源项目,它存储与Kafka集群相关的元数据信息,例如代理(broker)信息、主题详情等。因此,ZooKeeper基本上是管理整个Kafka集群的角色。
Kafka基本命令
创建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3--topic [scenario]
bin/kafka-topics.sh --zookeeper localhost:2181 --list
bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic mytopic
在本文中,我讨论了使用数据管道的问题,以及Kafka的消息传递系统如何解决这些问题。此外,我还解释了Kafka的一些重要命令和术语。
- 点赞
- 收藏
- 关注作者
评论(0)