首页 > 编程知识 正文

kafka中文教程,kafka实际应用

时间:2023-05-05 08:19:57 阅读:16840 作者:4134

另一方面,Apache Kafka定义了它是一个开源消息系统。 可以在系统中起到“填充hxdhlg”的作用,也可以用于异构、分布式系统中的大量数据异步处理。

系统包括四个主要的API:

产品API

允许一个APP应用程序通过一个或多个Kafka topics的客户API

允许一个APP应用程序订阅一个或多个topics并处理这些流记录; 流API

连接器API,允许APP应用程序作为流处理者通过topics输入和输出流数据

绑定并运行Producer或Consumer以将Kafka topics连接到现有系统或存储; 二、功能介绍1 )主题和日志主题是发布记录的类别或提要名称。 Kafka的主题将用户关联起来; 一个主题可以有0个或多个Consumer订阅的写入数据。

对于每个主题,kafka群集维护分区日志,如下图所示。

每个分区都是一组系统的、不变的记录,并继续添加到结构化提交日志中。 分区中的每条记录都被分配一个序列ID号,称为偏移,它唯一地标识分区中的每条记录。

Kafka群集可以永久保存所有已发布的记录,无论是否已消耗,并且可以轻松设置保留期。

每个消费者都保留消费者在日志中消耗的偏移或位置。 通常,消费者在读取记录时可以线性地增加偏移量,同时消费者可以按照自己喜欢的顺序消耗记录。

Kafka三层消息框架:

一级:主题级别。 每个主题可以配置n个分区,每个分区可以配置m个副本。

第二层(分区层,每个分区的m拷贝只能有一个lender拷贝,它是对外服务的。 其他M-1拷贝是cjdxbw拷贝,仅提供数据冗馀(客户端仅与分区中的leader拷贝交互)。

第3层)消息层、分区包含几条消息,每条消息的位移从0开始,并依次增加。

2 )分布式)日志分区分布在Kafka群集中的服务器上,每个服务器都可以处理请求数据。 每个分区都将通过可配置的服务数量进行复制,以实现容错。

每个分区只有一台服务器作为“leader”,0台以上的服务器作为“followers”。 leader节点处理分区中所有记录的读取和写入,而followers节点复制leader节点中的数据。 如果leader节点异常,则会选择其中一个followers节点作为leader节点。 由于每个服务器都充当某些分区的leader节点和其他服务器的followers节点,因此负载平衡在群集中得到很好的平衡。

3 )异地复制Kafka MirrorMaker支持群集的地理复制。 使用MirrorMaker,可以跨多个数据中心或云区域复制数据。 主动/被动方法可用于备份和恢复。 或者,主动/主动方式使数据接近用户,并支持数据位置要求。

4 ) Producers生产者向选定的主题公开数据。 生产者有责任选择分配给主题哪个分区的记录。 这可以只是为了平衡负载而循环进行,也可以基于语义分区功能,如基于记录中的特定键。

5 ) Consumers消费者使用消费者群名称标记自己,主题发布的各记录传递给各订阅消费者群内的消费者实例。 消费者实例可以在单独的过程中使用,也可以在不同的机器上使用。

如果所有用户实例都具有相同的用户组,则记录将在用户实例上有效地进行负载平衡。

如果所有消费者实例都有不同的消费者组,则每个记录都会广播到所有消费者流程。

托管包含2个服务器Kafka集群、2个用户组的4个分区(P0-P3 )。 消费者组a有两个消费者实例,组b有四个消费者实例。

在Kafka中实现消费的方法是将日志中的分区划分到消费者实例中,以确保每个实例都是在任何时间分配的“公平共享”独家消费者。 维护组成员资格的过程由Kafka协议动态处理。 新实例加入组后,将从组的其他成员那里继承分区。 如果实例死亡,则该分区将分发到其馀实例。 分区实现了Kafka的高并发性。

6 )可靠性生产者发送到特定主题分区的消息将按其发送顺序附加。 也就是说,如果记录M1是从与记录M2相同的生产者发送的,并且第一次发送M1,则M1的偏移低于M2,并且它快速出现在日志中。 消费者实例按在日志中存储的顺序显示记录。 对于具有复制因子n的主题,最多允许N-1个服务故障,而不会丢失提交到日志的记录。 三、实践应用1 ) Kafka作为消息系统的通用消息系统,有队列和发布-订阅两种消息模型。

队列:队列中的数据由消费节点读取。 其优点是可以在多个消费者实例上分割数据处理。 缺点是队列不支持多租户,并且如果是多个实例,则无法读取其他实例消耗的记录。

发布-订阅:记录将广播到所有消费者,并且可以将数据广播到多个消费者实例。

消息顺序:在通用队列模型中,服务器按顺序存储记录,如果多个消费者从队列中消费,服务器会按存储顺序分发记录,但消息不同

步传递给消费者的,
因此他们可能会存在不同消费者上的无序传送。

消息传递系统通常通过具有“独占消费者”的概念来解决这个问题,该概念只允许一个进程从队列中消耗,但这当然意味着处理中没有并行性。

kafka 通过在主题中具有并行性概念 - 分区 - ,Kafka能够在消费者流程池中提供订购保证和负载平衡。这是通过将主题中的分区分配给使用者组中的使用者来实现的,以便每个分区仅由该组中的一个使用者使用。通过这样做,我们确保使用者是该分区的唯一读者并按顺序使用数据。由于有许多分区,这仍然可以平衡许多消费者实例的负载。但请注意,消费者组中的消费者实例不能超过分区。

2)Kafka作为存储系统

任何允许发布与消费它们分离的消息的消息队列实际上充当了正在进行的消息的存储系统。Kafka的不同之处在于它是一个非常好的存储系统。

写入Kafka的数据将写入磁盘并进行复制以实现容错。Kafka允许生产者等待确认,以便在完全复制之前写入不被认为是完整的,并且即使写入的服务器失败也保证写入仍然存在。

磁盘结构Kafka很好地使用了规模 - 无论服务器上有50 KB还是50 TB的持久数据,Kafka都会执行相同的操作。

由于认真对待存储并允许客户端控制其读取位置,您可以将Kafka视为一种专用于高性能,低延迟提交日志存储,复制和传播的专用分布式文件系统。

3)Kafka用于流处理
仅仅读取,写入和存储数据流是不够的,目的是实现流的实时处理。

在Kafka中,流处理器是指从输入主题获取连续数据流,对此输入执行某些处理以及生成连续数据流以输出主题的任何内容。

例如,零售应用程序可能会接收销售和发货的输入流,并输出重新排序流和根据此数据计算的价格调整。

可以使用生产者和消费者API直接进行简单处理。但是,对于更复杂的转换,Kafka提供了完全集成的Streams API。这允许构建执行非平凡处理的应用程序,这些应用程序可以计算流的聚合或将流连接在一起。

此工具有助于解决此类应用程序面临的难题:处理无序数据,在代码更改时重新处理输入,执行有状态计算等。

流API构建在Kafka提供的核心原语上:它使用生产者和消费者API进行输入,使用Kafka进行有状态存储,并在流处理器实例之间使用相同的组机制来实现容错。

四、名词解释 消息:Record。Kafka是消息引擎,这里的消息就是Kafka处理的主要对象。主体:Topic。主题就是承载消息的逻辑容器,在实际应用中多用于区分具体业务。消息位移:Offset。表示分区中每条消息的位置信息,是一个单调递增不变的值。副本:Replica。Kafka中一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和cjdxbw副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。生产者:Producer 。 向主题发布新消息的应用程序。消费者:Consumer。从主题订阅新消息的应用程序。消费者位移:Consumer Offset 。表示消费者消费进度,每个消费者都有自己的消费者位移。消费者组:Consumer Group 。多个消费者实例共同组成的一个组,同时消费多个分区实现高吞吐。重平衡:Rebalance。消费者组内某个消费者实例挂掉后,其它消费者实例自动重新分配订阅主题分区的过程。Rebalance 是kafka
消费者端实现高可用的重要手段。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。