• kafka理论


    一、消息队列,简称MQ,message queue

    生产者:生存数据写到kafka,持久化到硬盘。对同一个Topic来讲,生产者通常只有‘一个’(可以多并发)数据保存时常可以配置,默认保存七天。

    消费者:从kafka里消费数据。对同一个Topic来讲,消费者会很多,根据业务需要。

    kafka的消息分几个层次:

    1)Topic:一类消息,例如page view 日志,click日志等都以topic的形式存在,kafka集群能够负责多个topic分发

    2)partition:topic物理上的分组,一个topic可以分为多个partition(默认为2个),每个partition是一个有序的队列。partition中的每个消息都会被分配到一个有序的id(offset,消费位置)。(位置记录在zookeeper中 可以宕机继续消费)

    3)Message:消息,最小订阅单元

    数据流程:

    1、producer根据指定的partition方法(round-robin、hash等【不指定的话内部会自己指定】),将消息发布到指定的topic的partition里面

    2、kafka集群接收到producer发过来的消息后,将其持久化到硬盘,并保留消息指定时常(可配置,默认7天),而不关注消息是否是否被消费。

    3、Consumer从kafka集群消费(pull)数据,并控制获取消息的offset偏移量。

    (kafka消费都采用pull方式,即客户端customer主动拉取数据,客户端控制offset,客户端可以根据需要随时随地进行消费,更加灵活,而且对服务端来讲更加省事)

    (push方式为服务端推送数据到客户端,kafka不支持,服务端控制offset)

    比如消费同一个topic的作业有100个,如果服务端维护offset很麻烦,增加服务端的工作量。

    kafka为何能支持高吞吐量?

    1)数据磁盘持久化:消息不存在内存中cache,直接写入磁盘,充分利用磁盘的顺序读写性能,所以borker没内存压力

    2)zero-copy:减少IO操作步骤

    3)数据批量发送

    4)数据压缩

    5)Topic划分为多个partition,提高parallelism(并行度)

    (如果内存加硬盘不是更快,但是kafka是先进先出,消费旧数据,内存是缓存最新的不适合kafka特性,所以不缓存到内存中)

    kafka如何做到负载均衡?

    1)producer根据用户指定的算法,讲消息发送到指定的partition

    2)存在多个partition,每个partition有自己的replica(副本),每个replica分布在不同的broker节点上

    3)多个partition时候需要选取leader partition(通过zk的选举机制),leader partition 负责读写,并由zookeeper 负责fail over(快速失败)

    4)通过zookeeper管理broker与consumer的动态加入与离开

  • 相关阅读:
    [安装程序配置服务器失败]解决SQL Server2000安装失败
    C# 操作 XML 增 删 改 查
    批量修改文件的编码格式
    获取SqlServer2005表结构(字段,主键,外键,递增,描述)
    .NET 特性Attribute[一]
    windows2003远程桌面退出后系统自动注销的解决方法
    SqlServer 无日志文件附加
    接受来自服务器的数据连接时发生超时(30000 毫秒)问题原因及解决方法
    .net中数据集合导出为Excel(支持泛型及显示字段顺序,可自定义显示列名)
    EF中自编写SQL脚本查询结果(适用于复杂SQL逻辑提高查询效率)
  • 原文地址:https://www.cnblogs.com/yaohaitao/p/5538784.html
Copyright © 2020-2023  润新知