大数据术语之Kafka

生产者:Producer。向主题发布新消息的应用程序。
消费者:Consumer。从主题订阅新消息的应用程序。
消费者位移:Consumer Offset。表征消费者消费进度,每个消费者都有自己的消费者位移。
消费者组:Consumer Group。多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。
消息:Record。Kafka是消息引擎嘛,这里的消息就是指Kafka处理的主要对象。
消息位移:Offset。表示分区中每条消息的位置信息,是一个单调递增且不变的值。
主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。
分区:Partition。一个有序不变的消息序列。每个主题下可以有多个分区。
副本:Replica。Kafka中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本,副本还分为领导者副本和追随者副本,各自有不同的角色划分。
副本是在分区层级下的,即每个分区可配置多个副本实现高可用。
重平衡:Rebalance。消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程,Rebalance是Kafka消费者端实现高可用的重要手段。
ISR
    ISR(In-Sync Replicas),副本同步队列。ISR中包括Leader和Follower。如果Leader进程挂掉,会在ISR队列中选择一个服务作为新的Leader。
任意一个维度超过阈值都会把Follower剔除出ISR,存入OSR(Outof-Sync Replicas)列表,新加入的Follower也会先存放在OSR中。
Ack
    Ack=0,相当于异步发送,消息发送完毕即offset增加,继续生产。
    Ack=1,leader收到leader replica 对一个消息的接受ack才增加offset,然后继续生产。
    Ack=-1,leader收到所有replica 对一个消息的接受ack才增加offset,然后继续生产。
分区分配策略
    在 Kafka内部存在两种默认的分区分配策略:Range和 RoundRobin。
    Range是默认策略。Range是对每个Topic而言的(即一个Topic一个Topic分区),首先对同一个Topic里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。
然后用Partitions分区的个数除以消费者线程的总数来决定每个消费者线程消费几个分区。如果除不尽,那么前面几个消费者线程将会多消费一个分区。
    RoundRobin:前提:同一个Consumer Group里面的所有消费者的num.streams(消费者消费线程数)必须相等;每个消费者订阅的主题必须相同。
第一步:将所有主题分区组成TopicAndPartition列表,然后对TopicAndPartition列表按照hashCode进行排序,最后按照轮询的方式发给每一个消费线程。
Kafka数据积压
    1)如果是Kafka消费能力不足,则可以考虑增加Topic的分区数,并且同时提升消费组的消费者数量,消费者数=分区数。(两者缺一不可);
    2)如果是下游的数据处理不及时:提高每批次拉取的数量。批次拉取数据过少(拉取数据/处理时间<生产速度),使处理的数据小于生产的数据,也会造成数据积压;
数据监控: KafkaManager、KafkaEagle

上一篇:【消息队列面试】6-10:Rebalance机制、副本同步机制、架构设计、zk的作用、kafka的高性能


下一篇:Kafka知识总结之集群环境搭建