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实现 类似于ConcurrentHashMapKafka的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没有任何关系,即使他们的值相同
未完待续
网友评论