一、kafka快速完成保存的手段之一——————分区和并行写入
Kafka的主题(Topic)可以分为多个分区,每个分区都可以在不同的节点上进行并行写入。这使得多个生产者可以同时将消息写入不同的分区,从而提高写入吞吐量。此外,消费者也可以并行地从多个分区读取消息,以加快消息的处理速度。
二、生产者(producer)—ACK机制(消息传递机制)
ACK:在Kafka中,ack机制是指生产者发送消息后,如何确保消息被成功写入到Broker并得到确认。
-
acks=0:生产者在发送消息后不需要等待Broker的确认,直接认为消息发送成功。这种方式具有最低的延迟,但也是最不可靠的方式,因为消息可能会在传输过程中丢失,而生产者无法得知。
-
acks=1:生产者在发送消息后,等待Leader Broker将消息写入到本地日志中并返回确认。一旦Leader确认接收消息,生产者可以认为消息发送成功。这种方式比acks=0要可靠,但仍然存在一定的风险,因为如果Leader Broker在确认消息后立即失败,但尚未将消息复制到其他副本,那么消息将会丢失。
-
acks=all(或acks=-1):生产者在发送消息后,等待Leader Broker将消息写入本地日志并等待所有的副本都复制成功后才返回确认。只有在所有副本都确认接收消息后,生产者才认为消息发送成功。这种方式是最可靠的,但也具有最高的延迟,因为需要等待所有副本的复制操作完成。
三、消费者(consumer)——三大消费策略earliest,latest,none
1.偏移量(Offset):
在Apache Kafka中,偏移量(Offset)是用于标识和追踪消费者在一个特定分区中已经消费的消息位置的一个唯一标识符。每个分区中的消息都按照顺序进行编号,从0开始递增,这个编号就是偏移量。偏移量可以被认为是一个消息在分区中的唯一地址。消费者可以使用偏移量来记录自己在分区中的消费进度,从而在故障恢复或重启后准确地继续消费
假设有一个为kb22-p2的分区里面含有 a1、a2、a3等三条数据现在有消费者根据相应的消费策略从中取数据
2.策略
earliest
:如果消费者在初始启动时或者找不到有效的偏移量时,会从最早的可用偏移量开始消费。也就是说,它会从该分区最早的消息开始消费。
举例:假设consumer1第一次访问分区kb22-p2,首先consumer-offset会根据已有的数据访问记录查询其是否是第一次访问,如果是第一次访问系统会优先推送第一条消息给消费者,消费者浏览结束系统会自动提交反馈。如果是第二次访问系统根据偏移量进行推送之后的信息,如果还想访问已浏览的消息可以在后面设置条件(例如a1的偏移量)。
latest
:如果消费者在初始启动时或者找不到有效的偏移量时,会从最新的可用偏移量开始消费。也就是说,它会从该分区最新的消息开始消费。
举例:假设consumer2第一次访问分区kb22-p2,首先consumer-offset会根据已有的数据访问记录查询其是否是第一次访问,如果是第一次访问系统会优先推送最新的一条消息给消费者,消费者浏览结束系统会手动提交。
none
:如果消费者在初始启动时或者找不到有效的偏移量时,会抛出一个异常。该异常会提示消费者找不到有效的偏移量,需要手动设置偏移量。
四、CAP原则
1.定义:CAP原则是分布式系统设计中的一个重要原则,它指的是一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三个特性之间的权衡关系。CAP原则表明,在一个分布式系统中,无法同时满足这三个特性,最多只能同时满足其中的两个。
2.三性:
(1)一致性(Consistency):指分布式系统中的所有节点在同一时间具有相同的数据副本。即,当数据发生变化时,所有节点都能够立即看到最新的数据。一致性要求在数据写入后,所有的读操作都能读取到最新的写入数据。
(2)可用性(Availability):指分布式系统在面对节点故障或其他异常情况时,仍然能够提供正常的服务。可用性要求系统随时可用,用户能够正常访问和使用系统。
(3)分区容错性(Partition Tolerance):指分布式系统能够在网络分区(节点之间无法正常通信)的情况下继续正常工作。分区容错性要求系统能够将节点分散在不同的网络分区中,并保持节点之间的独立性和自治性。
五、ISR
1.定义:ISR(In-Sync Replica)是Apache Kafka中的一个概念,用于描述在分布式消息系统中处于同步状态的副本集合。在Kafka中,每个分区(partition)都会有多个副本(replica)用于实现数据的冗余和高可用性。其中,ISR是指与Leader副本(Leader Replica)保持同步的副本集合。Leader副本负责处理读写请求,而ISR中的副本则按照Leader副本的状态来进行数据复制,以保持数据一致性。
2.作用:当一个分区的Leader副本发生故障或变得不可用时,Kafka会从ISR中选择一个新的副本作为新的Leader,以确保分区的可用性。只有与新Leader副本保持同步的副本才能进入ISR,而不与新Leader副本保持同步的副本将被移除,需要进行数据恢复和同步操作。