栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

再学Kafka

再学Kafka

1、kafka中的一些名词术语

    Broker:消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群。Topic:Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic。Producer:消息生产者,向Broker发送消息的客户端。Consumer:消息消费者,从Broker读取消息的客户端。ConsumerGroup:每个Consumer属于一个特定的Consumer Group,一条消息可以被多个不同的Consumer Group消费,但是一个Consumer Group中只能有一个Consumer能够消费该消息。Partition:物理上的概念,一个topic可以分为多个partition,每个partition内部消息是有序的

    用自己的话来总结下几个关键词:
    一个topic,代表逻辑上的一个业务数据集,比如按数据库里不同表的数据操作消息区分,放入不同topic,订单相关操作消息放入订单topic,用户相关操作消息放入用户topic,对于大型网站来说,后端数据都是海量的,订单消息很可能是非常巨量的,比如有几百个G甚至达到TB级别,如果把这么多数据都放在一台机器上可定会有容量限制问题,那么就可以在topic内部划分多个partition来分片存储数据,不同的partition可以位于不同的机器上,每台机器上都运行一个Kafka的进程Broker。Topic是一个逻辑上的概念,在逻辑上将同一类型的消息汇总,方便处理。同一个topic中的不同partition可以在不同的Broker上。
    2、为什么要对Topic下数据进行分区存储?
    1、commit log文件会受到所在机器的文件系统大小的限制,分区之后可以将不同的分区放在不同的机器上,相当于对数据做了分布式存储,理论上一个topic可以处理任意数量的数据。
    2、为了提高并行度。
    3、集群消费
    log的partitions分布在kafka集群中不同的broker上,每个broker可以请求备份其他broker上partition上的数据。kafka集群支持配置一个partition备份的数量。
    针对每个partition,都有一个broker起到“leader”的作用,0个或多个其他的broker作为“follwers”的作用。leader处理所有的针对这个partition的读写请求,而followers被动复制leader的结果,不提供读写(主要是为了保证多副本数据与消费的一致性)。如果这个leader失效了,其中的一个follower将会自动的变成新的leader。具体的leader选举逻辑会在后面的kafka原理及机制的学习文章中详细描述。
    1、Producers
    生产者将消息发送到topic中去,同时负责选择将message发送到topic的哪一个partition中。通过round-robin做简单的负载均衡。也可以根据消息中的某一个关键字来进行区分。通常第二种方式使用的更多。
    2、Consumers
    传统的消息传递模式有2种:队列( queue) 和(publish-subscribe)
    queue模式:多个consumer从服务器中读取数据,消息只会到达一个consumer。
    publish-subscribe模式:消息会被广播给所有的consumer。
    Kafka基于这2种模式提供了一种consumer的抽象概念:consumer group。
    queue模式:所有的consumer都位于同一个consumer group 下。
    publish-subscribe模式:所有的consumer都有着自己唯一的consumer group。

    上图说明:由2个broker组成的kafka集群,某个主题总共有4个partition(P0-P3),分别位于不同的broker上。这个集群由2个Consumer Group消费, A有2个consumer instances ,B有4个。
    通常一个topic会有几个consumer group,每个consumer group都是一个逻辑上的订阅者( logical subscriber )。每个consumer group由多个consumer instance组成,从而达到可扩展和容灾的功能。

消费顺序
一个partition同一个时刻在一个consumer group中只能有一个consumer instance在消费,从而保证消费顺序。
consumer group中的consumer instance的数量不能比一个Topic中的partition的数量多,否则,多出来的consumer消费不到消息。
Kafka只在partition的范围内保证消息消费的局部顺序性,不能在同一个topic中的多个partition中保证总的消费顺序性。
如果有在总体上保证消费顺序的需求,那么我们可以通过将topic的partition数量设置为1,将consumer group中的consumer instance数量也设置为1,但是这样会影响性能,所以kafka的顺序消费很少用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/745857.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号