• kafka


    作者:知乎用户
    链接:https://www.zhihu.com/question/22480085/answer/135092014
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    Kafka是可靠的分布式日志存储服务。

    用简单的话来说,你可以把Kafka当作可顺序写入的一大卷磁带, 可以随时倒带,快进到某个时间点重放。





    先说下日志的定义:日志是数据库的核心,是对数据库的所有变更的严格有序记录,“表”是变更的结果。日志的其他名字有: Changelog, Write Ahead Log, Commit Log, Redo Log, Journaling.

    Kafka的特征如下:

    高写入速度:Kafka能以超过1Gbps NIC的速度写这盘磁带(实际可以到SATA 3速度,参考Benchmarking Apache Kafka: 2 Million Writes Per Second (On Three Cheap Machines)
    ),充分利用了磁盘的物理特性,即,随机写入慢(磁头冲停),顺序写入快(磁头悬浮)。

    高可靠性: 通过zookeeper做分布式一致性,同步到任意多块磁盘上,故障自动切换选主,自愈。

    高容量:通过横向扩展,LinkedIn每日通过Kafka存储的新增数据高达175TB,8000亿条消息,可无限扩容,类似把两条磁带粘到一起。

    传统业务数据库的根本缺陷在于:
    1. 太慢,读写太昂贵,无法避免的随机寻址。(磁盘最快5ms寻址,固态又太昂贵。)
    2. 根本无法适应持续产生的数据流,越用越慢。(索引效率问题)
    3. 无法水平scale。(多半是读写分离,一主多备。另: NewSQL通过一致性算法,有多主。)

    针对这些问题,Kafka提出了一种方法:

    “log-centric approach(以日志为中心的方法)。”

    将传统数据库分为两个独立的系统,即日志系统和索引系统

    “持久化和索引分开,日志尽可能快的落地,索引按照自己的速度追赶。”

    数据可靠性在得到Kafka这种快速的,类似磁带顺序记录方式保障的大前提下。数据的呈现,使用方式变得非常灵活,可以根据需要将数据流同时送入搜索系统,RDBMS系统,数据仓库系统, 图数据库系统,日志分析等这些各种不同的数据库系统。 这些不同的系统只不过是一种对Kafka磁带数据一种诠释,一个侧面,一个索引,一个快照。数据丢了,没关系,重放一遍磁带即可,更多的时候,对这些各式数据库系统的维护只是需要定期做一个快照,并拷贝到一个安全的对象存储(如S3) 而已。

    一句话:“日志都是相同的日志,索引各有各的不同。”

    关于流计算:

    在以流为基本抽象的存储模型下,数据流和数据流之间,可以多流混合处理,或者流和状态,状态和状态的JOIN处理,这就是Kafka Stream提供的功能。 一个简单的例子是,在用户触发了某个事件后,和用户表混合处理,产生数据增补(Augment),再进入数据仓库进行相关性分析,一些简单的窗口统计和实时分析也很容易就能满足,比如 在收到用户登录消息的时候,在线人数+1, 离线的时候-1,反应出当前系统的在线用户总数。这方面可以参考PipelineDB

    Kafka会让你重新思考系统的构建方式,使以前不可能的事变为可能,是一个系统中最重要的最核心的部分,不夸张的说,系统设计都需要围绕Kafka做。强烈推荐阅读:oldratlee/translations
  • 相关阅读:
    cf3b(贪心)
    cf4b
    poj 1037(经典dp)
    网络流之SAP算法学习
    cf3d
    hdu 1572(dfs+最短路)
    hdu 1735(贪心)
    Elementary Methods in Number Theory Exercise 1.5.10
    Elementary Methods in Number Theory Exercise 1.5.12
    Elementary Methods in Number Theory Exercise 1.5.10
  • 原文地址:https://www.cnblogs.com/bigben0123/p/7838822.html
Copyright © 2020-2023  润新知