美文网首页
Kafka原理

Kafka原理

作者: Lee_d441 | 来源:发表于2018-11-26 21:06 被阅读0次

    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原理

          本文链接:https://www.haomeiwen.com/subject/taryqqtx.html