kafka工作原理-kafka工作原理 0
一探究竟,详解Kafka生产者和消费者的工作原理!
1、Kafka群集为每个主题维护分区日志,确保有序性和不变性记录序列,分配唯一偏移量标识记录。 消费者保留唯一元数据,即日志中的偏移量,使用户能够控制消息处理顺序,例如重置偏移量或跳过记录。 分区设计结构包括生产者分区策略,决定消息发送到哪个分区,以及生产者和Broker端的消息压缩机制。
2、kafka消息的有序性,是采用消息键保序策略来实现的。 一个topic,一个partition(分割),一个consumer,内部单线程消费,写N个内存queue,然后N个线程分别消费一个内存queue。kafka发送进行消息压缩有两个地方,分别是生产端压缩和Broker端压缩。
纯干货:10分钟了解Kafka,RocketMQ,Seata的事务实现
Kafka、RocketMQ和Seata的事务实现都是基于2PC协议的变体,但各有特点:Kafka的事务消息: 核心特点:保证多消息投递的原子性。 与2PC协议的不同: 在请求表决阶段结束后,TC直接返回给producer事务结果,而不需要等到提交执行阶段结束收到ACK。
总结Kafka:事务消息实现主要解决多消息投递的原子性问题,通过TC协调事务过程,利用epoch解决脑裂问题。RocketMQ:事务消息解决消息投递和本地事务的原子性问题,本地事务在第一阶段完成,简化回滚过程。Seata:将TM和RM解耦,实现分布式事务管理,支持AT和TCC两种模式,提供灵活的事务管理方案。
第一个,相比较Kafka,Seata把TM和RM解耦出来的原因。在Kafka里,做资源管理的都是producer,就是说做消息投递的是producer,做提交消费位移的也是producer,所以就可以让producer身兼数职,既做资源编排,又控制整个事务。
CAP 理论CAP理论是分布式系统设计中的一个基础理论,指的是在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三个要素无法同时保证,需要在这三个要素之间做出权衡。
Apache RocketMQ:RocketMQ是阿里巴巴开源的分布式消息中间件,我曾在一些需要异步通信和数据同步的场景中使用过它。RocketMQ具有高吞吐量、低延迟、高可用的特性,非常适合大规模消息处理和实时数据分析。通过RocketMQ,我们可以实现消息的可靠传递和异步处理,提高系统的响应速度和吞吐量。
常见中间件:ActiveMQ、Kafka、RabbitMQ、RocketMQ、Pulsar等。 分布式配置定义:分布式配置是将配置信息存储到远端,对配置进行统一管理。功能:允许应用在启动或运行时从远端获取配置信息,实现配置的动态更新和统一管理。常见中间件:Apollo、Nacos、ConfigServer等。
Kafka事务实现原理
Kafka事务的实现原理主要是为了确保在一个事务中发送的多条消息,要么都成功,要么都失败。这种机制与RocketMQ的事务机制类似,都基于两阶段提交来实现。
Kafka Exactly Once 语义的实现原理主要包括幂等性和事务消息两个方面: 幂等性: 概念:幂等性指的是对同一操作的多次执行与一次执行的效果相同。在Kafka中,生产者幂等性确保同一消息不会被重复发送到同一分区。 实现方式:通过设置enable.idempotence参数并控制连接、重试和确认机制来实现。
总结Kafka:事务消息实现主要解决多消息投递的原子性问题,通过TC协调事务过程,利用epoch解决脑裂问题。RocketMQ:事务消息解决消息投递和本地事务的原子性问题,本地事务在第一阶段完成,简化回滚过程。Seata:将TM和RM解耦,实现分布式事务管理,支持AT和TCC两种模式,提供灵活的事务管理方案。
实现事务机制最关键的概念就是事务的唯一标识符( TransactionalID ),Kafka 使用 TransactionalID 来关联进行中的事务。TransactionalID 由用户提供,这是因为 Kafka 作为系统本身无法独立的识别出宕机前后的两个不同的进程其实是要同一个逻辑上的事务。
解耦原因:在Seata中,第一阶段执行的本地事务由业务决定,因此将TM单独拎出来做事务管理,资源编排可以自由实现。综上所述,Kafka、RocketMQ和Seata虽然都基于2PC协议实现事务,但在具体实现细节和应用场景上有所不同。理解这些差异有助于更好地选择和使用这些中间件来满足特定的业务需求。