zoukankan      html  css  js  c++  java
  • Kafka

    消息

    – 消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。
    • 消息队列
     消息队列是在消息的传输过程中保存消息的容器,消息传递中间人。
     提供路由并保证消息的传递。
     如果发送消息时接收者丌可用,消息队列会保留消息,直到可以成功地传递它。
     分布式应用中,消息队列是互相交换信息的一种技术。可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。
     通过消息队列,应用程序可独立地执行--松耦合。

    在kafka中,发送消息者称为Producer,而消息接收者称为Consumer

    Producer和consumer都依赖于Zookeeper来保证系统可用性,为集群保存一些meta信息

    上图是每个topic都有三个备份,如果没有三个备份,一个topic的不同的partition可以分到不同的broker上。

    Kafka集群有多个实例组成,每个节点称为broker。对消息保存时,根据Topic进行归类(是一个逻辑概念,相当于一个分布式队列),为了加快读取速度,多个consumer可以划分为一个组,并进行消费一个topic。

    Producer :消息生产者,就是向Kafkabroker发消息的客户端。

    Consumer :消息消费者,向Kafkabroker取消息的客户端。

    Broker :Kafkacluster 是由多个broker组成,一台Kafka服务器就是一个broker。 一个broker可以容纳多个topic。

    Topic :可以理解为一个队列。

    Partition:

    为了实现扩展性,一个非常大的topic可以分布到多个broker(服务器)上,一个topic由多个partition组成,每个partition是一个有序的队列。 partition中的每条消息都会被分配一个有序的id(offset)。

    Producer通过Partitioner决定消息发送到哪个Partition,跟mr 的partitioner类似

    kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。

    根据offset查找消息的方法

    1,按照二分法找到小于1008的segment,也就是00000000000000001000.log和00000000000000001000.index

    2,用目标offset减去文件名中的offset得到消息在这个segment中的偏移量。也就是1008-1000=8,偏移量是8。

    3,再次用二分法在index文件中找到对应的索引,也就是第三行6,45。

    4,到log文件中,从偏移量45的位置开始(实际上这里的消息offset是1006),顺序查找,直到找到offset为1008的消息。查找期间kafka是按照log的存储格式来判断一条消息是否结束的。

     kafka也自带了zookeeper

    topic分为多个partition,每个partition有两个备份,0,1表示在每个备份所在broker的id

  • 相关阅读:
    Bootstrap--模仿官网写一个页面
    【ASP.NET基础】客户端、服务器端的数据验证 + CKEditer
    初识--Ajax & Json
    ASP.NET 状态的传递和保存
    启动项目报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadT
    Oracle数据库导不进去
    Tomcat一闪就退
    Oracle提示已连接到空闲的实例
    创建数据库表空间
    cmd命令导入.dmp文件
  • 原文地址:https://www.cnblogs.com/fisherinbox/p/6586382.html
Copyright © 2011-2022 走看看