认识Kafka

Kafka是什么?

       

Kafka是一个分布式消息系统中间件,主要在分布式环境下为各个系统提供消息传递服务。其主要优点是高吞吐、超强的消息堆积、持久化能力强、快速的消息getput


Kafka的核心组件以及相关概念

        认识Kafka

        BrokerKafka集群的每一个节点称为broker,使用broker来接收ProducerConsumer的请求,并把Message持久化到本地磁盘。每个Cluster当中会选举出一个Broker来担任Controller,负责处理Partitionleader选举,协调Partition迁移等工作。

        Consumer用于从Broker中取出/消费Message

        Producer用于往Broker中发送/产生Message

注意:以上组件在分布式环境下均可以是多个,支持故障转移。同时ZK仅和brokerconsumer相关。值得注意的是broker的设计是无状态的,消费的状态信息依靠消费者自己维护,通过一个offset偏移量。clientserver之间通信采用TCP协议。

认识Kafka
认识Kafka

        Topic用于划分Message的逻辑概念,一个topic可以分布在多个broker

        Partitionkafka中横向扩展和一切并行化的基础,每个topic都至少被切分为1partitionKafka中采用分区的设计有几个目的。一是可以处理更多的消息,不受单台服务器的限制。Topic拥有多个分区意味着它可以不受限的处理更多的数据。第二,分区可以作为并行处理的单元。

认识Kafka

        Offset消息在partition中的编号,编号顺序不能跨partition。由消费者控制offset,因此分区本身所在broker是无状态的。消费者可以*控制offset,很灵活。

同个分区内有序消费:每一个分区都是一个顺序的、不可变的消息队列, 并且可以持续的添加。分区中的消息都被分配了一个***,称之为偏移量(offset),在每个分区中此偏移量都是唯一的。

        ReplicationPartition副本数)每个分区都有自己的镜像分区,来保证分区的高可用。其中一个称为leader。如果leader挂掉了,也会有相应的选举算法来选新的leaderKafka支持以Partition为单位对Message进行冗余备份,每个Partition都可以配置至少1Replication(当仅1Replication时即仅该Partition本身)

        Leader每个Replication集合中的Partition都会选出一个唯一的Leader,所有的读写请求都由Leader处理。其他ReplicasLeader处把数据更新同步到本地,过程类似大家熟悉的MySQL中的Binlog同步。

        ISR(In-Sync Replica)Replicas的一个子集,表示目前Alive且与Leader能够Catch-upReplicas集合。由于读写都是首先落到Leader上,所以一般来说通过同步机制从Leader上拉取数据的Replica都会和Leader有一些延迟(包括了延迟时间和延迟条数两个维度),任意一个超过阈值都会把该Replica踢出ISR。每个Partition都有它自己独立的ISR

认识Kafka

        消费者组--同组每个消费者消费不同分区的数据,最好是消费者数=分区数

          消费者组提供两种消费TOPIC的方式:

           1)只有一个消费者组:保证消费者组内负载均衡的读取消息

           2)多个消费者组:每个组读取全部的消息