Kafka

作者: Wu杰语 | 来源:发表于2020-09-05 19:08 被阅读0次

    消息队列是分布式架构的基础组件,掌握这类组件是必要的,kafka是其中的典型代表。

    消息队列

    消息队列的电信原型就是队列,队列的特性就是先入先出,原型很简单。它的作用是什么呢,网上很多标准答案,解耦、异步、削峰填谷,可以参照https://blog.csdn.net/qq_34531925/article/details/75457743

    RabbitMQ、ActiveMQ、rocketMQ和Kafka

    这几个似乎目前主流的消息队列组件,需要了解其优劣
    https://blog.csdn.net/lifaming15/article/details/79942793
    更需要了解它的应用场景:

    • 如果只是需要一个开箱即用的消息队列,用rocketMQ
    • 如果是处理在线业务,处理低延迟和金融级的稳定性,那么用rabitMQ
    • 如果是收集日志、监控等,或者大数据,使用kafka

    消息队列的通用原理

    对于消息队列,每种消息队列都有其实现细节,但是对于其实现原理是相同的,有两种模式:

    • 队列模式


      image.png
    • 订阅模式


      image.png

    在实现的细节考虑的问题有:

    • 消息丢失怎么解决
    • 消息重复怎么解决
    • 消息积压怎么解决

    围绕这些点去学习消息队列的实现就不会迷失在细节中。

    Kafka的实现原理

    可以参见https://www.cnblogs.com/ericz2j/p/11169186.html

    image.png

    对于kafka,有三个部分,producer、broker、consumer。

    • broker是集群实现,消息的层次就体现在这里,分为topic、patition、replication、message,因为集群,所以需要依赖于zookeeper组件,为了提升性能,将topic按照分区的思维组织,为了高可用,区分出了replication。
    • producer向某个topic分发数据,类似于路由算法,有partition算法,根据partision计算结果,向某partition发送消息。
    • consumer消费数据,为了高效消费数据,提取除了consumer group概念,每个topic可以被多个consumer group消费,每个consumer group可以有多个consumer实列,每个实例会被分配消费某个partition,每个partition同一时间只能被同一个consumer group的一个实例消费。并且为了支持多个consumer group消费,提取出了offset,broker的消息会按序号组织,consumer自己会保存offset。

    思考一个问题,如果遇到对于消息时序性要求严格的消息队列,kafka多个分区还能发挥作用吗,消费者还能用多个实例消费吗?

    动手实践

    按照zookeeper集群,见Zookeeper的文章
    参见文章进行试验:https://blog.csdn.net/qq_36228916/article/details/97307179

    创建topic,发送消息,并用另外两个虚机接收


    image.png

    两个client端:


    image.png
    image.png

    小结

    学习消息组件,需要了解相关消息组件,通过kafka组件,可以了解到分布式的基础组件,为了支持高可用,一般都会采用集群,会使用到更基础的zookeeper组件。如果需要继续深入学习kafka,那么还需要更基础的实现原理,计算机组成原理、操作系统、网络知识等。

    相关文章

      网友评论

        本文标题:Kafka

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