无锡网站建设运营,建设银行网盾进不去网站是怎么办,厦门外贸网站建设 之家,哈尔滨企业自助建站系统展示Kafka工作方式的简单架构。
什么是Kafka#xff1f;为什么我们要使用它#xff1f;它是消息队列吗#xff1f;
它是一个分布式流处理平台或分布式提交日志。
Kafka通常用于实时流数据管道#xff0c;即在系统之间传输数据#xff0c;构建不断流动的数据转换系统和构…
展示Kafka工作方式的简单架构。
什么是Kafka为什么我们要使用它它是消息队列吗
它是一个分布式流处理平台或分布式提交日志。
Kafka通常用于实时流数据管道即在系统之间传输数据构建不断流动的数据转换系统和构建事件驱动的系统。
它确实可以充当消息队列但不仅限于此。它可以充当FIFO队列、发布/订阅消息系统、实时流处理平台。由于Kafka的持久性存储能力甚至可以用作数据库。
那么从上面的定义中什么是分布式流处理和提交日志
Kafka作为一个由一个或多个节点组成的集群工作这些节点可以位于不同的数据中心我们可以将数据/负载分布到Kafka集群中的不同节点它具有固有的可扩展性、可用性和容错性。
Kafka将数据存储为一系列连续的记录可以以不同的方法进行处理。
当您将数据推送到Kafka时它会将它们附加到记录流中就像将日志附加到日志文件中一样。
让我们开始...
为了理解这一点让我们深入研究关键主题
1.消息
消息是Kafka的原子数据单位。您可以推送字符串、整数、不同架构的JSON以及其他任何内容但通常将不同类型的消息推送到不同的主题中。可以使用一个键Key它只是一些元数据用于确定目标分区。
2.主题
我们可以将主题视为Kafka中的消息的逻辑类别它们是相同类型数据的流。
3.分区 Image.jpeg
这基本上是分片技术是Kafka的扩展能力背后的概念。分区是使消息能够并行分布在集群中的多个代理上的机制。使用这种并行性方法Kafka可以同时支持多个消费者和生产者的线性扩展。这种分区方法允许消费者和生产者的线性扩展。当我们将主题的数据拆分为多个流时我们称所有这些较小的流为该主题的“分区”。系统的性能还取决于设置分区的方式。消息的偏移量是该消息的数组索引。图中块上的数字表示偏移量第一个块位于第0个偏移量处最后一个块位于(n-1)个偏移量处。
4.生产者
(1) 将消息发布到Kafka主题的Kafka客户端
生产者用于决定将消息发送到哪个分区。根据不同的配置和参数生产者决定目标分区。
让我们检查不同的情况
未指定键生产者将随机决定分区并尝试平衡所有分区上的消息总数。指定键生产者使用一致性哈希[1]将键映射到分区。一致性哈希是一种哈希机制在相同的键上始终生成相同的哈希值它最小化了重新哈希情况下键的重新分布。指定分区您也可以硬编码目标分区。自定义分区逻辑我们可以根据分区可以决定的一些规则编写规则。
(2) 您可以以3种方式将消息发送到Kafka
发送并忘记 — 我们发送消息到Kafka代理并忘记它。由于Kafka是高可用的成功的机会很大。同步发送 — 您希望等待所有感兴趣的消费者完成您希望它们完成的任何操作异步发送 — 您不希望等待所有感兴趣的消费者完成您希望它们完成的任何操作
我们还可以在将消息发送到代理之前在生产者上配置特性。
为了获得更好的性能我们可以使用Avro序列化/反序列化器。
5.消费者
消费者以有序的方式从分区中读取消息。
每次消费者读取一条消息时它都会将偏移值存储到Kafka或Zookeeper上表示它是消费者读取的最后一条消息。
因此如果消费者节点崩溃它可以恢复到上次读取的位置。此外如果在任何时候消费者需要回到过去并读取旧消息它只需重置偏移位置即可。
(1) 轮询循环
您可以配置分区分配策略。
范围消费者获取连续的分区轮询轮询分配器列出了所有可用的分区和所有可用的
尝试在重新平衡时最小化影响保持大部分分配不变但允许协作重新平衡批处理大小。我们可以配置每次轮询调用返回多少条记录和多少数据。
(2) 提交偏移量
在读取消息时我们可以更新消费者的偏移位置这称为提交偏移量。可以启用自动提交或者应用程序可以显式地提交偏移量。这可以同步和异步两种方式完成。
6.消费者组
一组消费者一起工作从一个主题中读取消息。
扇出交换 可以由多个消费者组订阅单个主题。
一个实时示例是OTP发送服务可以在号码上发送OTP也可以发送到电子邮件。 Otp示例
1.订单保证 一个分区不能由同一个消费者组中的多个消费者读取。这由消费者组启用只有消费者组中的一个消费者可以从单个分区读取。 在这里生产者生成6条消息。每条消息都是键值对假设键“A”的值为“1”“C”的值为“1”“B”的值为“1”“C”的值为“2”……“B”的值为“2”。
我们的主题有3个分区由于一致性哈希具有相同键的消息始终进入同一分区因此所有键为“A”的消息都会在一起分组键为B和C的消息也是如此。
现在由于每个分区只有一个消费者它们只按顺序接收消息。因此消费者将在A2之前接收A1在B2之前接收B1因此保持了顺序。
因此对于3个分区您可以最多拥有3个消费者如果有4个消费者一个消费者将处于空闲状态。但对于3个分区您可以有2个消费者然后一个消费者将从一个分区读取另一个消费者将从两个分区读取。
7.代理
单个Kafka服务器。
代理接收来自生产者的消息为它们分配偏移量然后将它们提交到分区日志基本上是将数据写入磁盘这赋予了Kafka其持久性特性。
8.集群
由多个代理节点协同工作以提供可扩展性、可用性和容错性的集群。集群中的一个代理充当控制器负责将分区分配给代理。
当一个分区被复制到3个代理时其中一个代理将充当该分区的领导者其余两个将成为追随者。
数据始终写入领导者代理然后复制到追随者。通过这种方式我们既不会丢失数据也不会丢失集群的可用性如果领导者崩溃将选举出另一个领导者。
让我们深入一些编程内容
创建一个主题创建该主题的5个分区并将所有5个主题的数据复制到总共3个节点。kafka-topics — create — zookeeper zookeeper:2181 — topic applog — partitions 5 — replication-factor 3
Zookeeper
在集群中多次听到这个术语让我们看看它是什么
Zookeeper作为Kafka的中央配置和共识管理系统。它跟踪代理、主题和分区分配、领导者选举基本上是有关集群的所有元数据。
结束语
Kafka是一款出色的软件具有丰富的功能可以在各种用例中使用。Kafka非常适合现代分布式系统因为它是通过设计分布式的。它最初由LinkedIn创建目前由Confluent维护。像Uber、Netflix、Activision、Spotify、Slack、Pinterest、Coursera等顶级科技公司都在使用它。我们了解了Kafka的核心概念以帮助您入门。还有很多其他东西比如Kafka Stream API或kSql由于时间有限我们没有讨论。