Kafka原理

Kafka概述

Kafka构架

Kafka的Partition log是如何工作的?

Kafka的Consumer是如何获取消息的?

Kafka会不会丢失数据?

Kafka会不会重复数据?

概述

Apache Kafka is a distributed streaming platform.

A streaming platform has three key capabilities:

1)Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.

2)Store streams of records in a fault-tolerant durable way.

3)Process streams of records as they occur.

简而言之,Kafka是一个基于zookeeper的分布式流处理平台,既有消息系统的发布订阅功能又能一定程度上保存message以供后期统计及计算。Kafka因其可扩展、容灾能力和解耦服务等特性大量的应用于各种流业务中。

核心概念:Kafka基于log这种抽象数据模型,log是一种只能追加且按照时间完全有序的记录序列。1分钟了解什么是log



Kafka构架


Kafka宏观框架


从图中可以看到,Kafka有常见的生产者、消费者。流处理模块是指可以对输入流数据进行加工和转换的中间系统


Kafka内部构架图

1)Producer生产消息到发送缓冲区,然后发送至Kafka 对应的topic的leader节点

2)Kafka计算消息的hash值用来确定发送至哪一个Partition(每一个Partition都是一个log)

3)Kafka是可容灾的消息系统,因此需要对数据进行备份,同一份数据会被复制到其他broker的partition中

4)broker通过ack来应答Producer收到此消息,通过这一机制防止网络丢失数据包导致的

5)Consumer通过pull拉取对应的partition数据并处理,同时也发送ack至kafka表明已处理这条数据,下次拉取时不会重复消费

因此可以知道,Kafka通过broker集群来解决容灾问题,通过多个partition来存储消息并保证消息顺序,每个consumer从一个partition里获取消息并处理。通过ack来保证消息不重复消费



Kafka的Partition log是如何工作的?


Kafka Message存储方式


topic leader接收到message后,先hash然后将消息append到对应的partition,因此可以保证对于同一key的消息,kafka可以保证其写入同一partition log,也就保证了其有序性

Kafka log实现 类似于ConcurrentHashMap

Kafka的log和ConcurrentHashMap java7实现类似,有一个段列表,每个entry指向了真正的disk segment。由于log是只能追加且按照时间完全有序的记录序列,所以每次都从最后一个记录取数据,因此取数据的复杂度是O(1)



Kafka的Consumer是如何获取消息的?


Kafka 消费者组

1)任意消费组内,每个partition有且仅有一个consumer,因此kafka保证每个partition的消息处理是无锁且有序的,因此kafka才有大吞吐量

2)任一partition会被每个消费组消费,因此当需要对同一份message处理两种逻辑,可以分为两个消费组

3)GroupId是topic下的一个子概念,不同topic的groupId没有任何关系,即使他们的值相同


未完待续

你可能感兴趣的:(Kafka原理)