『美团』程序员基础解答:什么是Kafka?( 二 )


Kafka:流式架构Kafka最常用于将数据实时流式传输到其他系统中 。 Kafka是中间层 , 用于分离实时数据管道 。
【『美团』程序员基础解答:什么是Kafka?】Kafka核心不适用于直接计算 , 例如数据聚合或CEP 。 Kafka流是Kafka生态系统的一部分 , 提供了进行实时分析的功能 。
Kafka可用于为Storm , Flink , Spark流以及您的服务和CEP系统等快速通道系统(实时和操作数据系统)提供数据 。 还用于流数据以进行批处理数据分析 。 Kafka支持Hadoop 。 它将数据流式传输到大数据平台或RDBMS , Cassandra , Spark甚至S3中 , 以进行将来的数据分析 。 这些数据存储通常支持数据分析 , 报告 , 数据科学处理 , 合规性审核和备份 。
Kafka流架构图
现在 , 说了上面这些有的没的前缀 , 说说真正的问题:
什么是Kafka?Kafka是一个分布式流媒体平台 , 用于发布和订阅记录流 。 Kafka用于容错存储 。 Kafka将主题日志分区复制到多个服务器 。 Kafka旨在允许您的应用程序在记录发生时进行处理 。 Kafka快速且通过批处理和压缩记录来有效地使用IO 。 Kafka用于解耦数据流 。 Kafka用于将数据流传输到数据库 , 应用程序和实时流分析系统中 。
Kafka是多语种来自客户端和服务器的Kafka通信使用经过版本控制和记录的TCP有线协议 。 Kafka承诺与较旧的客户端保持向后兼容性 , 并且支持多种语言 。 有C# , Java , C , Python , Ruby和许多其他语言的客户端 。 Kafka生态系统还提供REST代理 , 允许通过HTTP和JSON轻松集成 , 这使得集成更加容易 。
Kafka还通过Confluent Schema Registry for Kafka支持Avro模式 。 Avro和Schema Registry允许客户端以多种编程语言生成和读取复杂的记录 , 并允许记录的演变 。 因此它是真正的多语种 。
Kafka很有用Kafka允许构建实时流数据管道 。 Kafka支持内存中的微服务(即actor , Akka ,Baratine.io , QBit , reactor , reactive , Vert.x , RxJava和Spring Reactor) 。 Kafka允许构建对流做出反应的实时流应用程序 , 以进行实时数据分析 , 转换 , 反应 , 聚合 , 加入实时数据流 , 以及执行 CEP(复杂事件处理) 。

  • 我们可以使用Kafka来帮助收集指标/ KPI , 汇总来自许多来源的统计信息以及实施事件源 。
  • 可以将其与微服务(内存中)和参与者系统一起使用以实现内存服务(分布式系统的外部提交日志) 。
  • 可以使用Kafka在节点之间复制数据 , 为节点重新同步以及恢复状态 。 尽管Kafka主要用于实时数据分析和流处理 , 但也可以将其用于日志聚合 , 消息传递 , 点击流跟踪 , 审计跟踪等 。
在数据科学和分析非常重要的世界中 , 捕获数据以馈入数据湖和实时分析系统也 很重要 。 而且由于Kafka可以承受这些特别复杂的用例 , 因此Kafka至关重要 。
Kafka是可伸缩的消息存储Kafka是一个很好的记录/消息存储系统 。 Kafka就像高速文件系统一样 , 用于提交日志的存储和复制 。 这些特性使Kafka可用于各种应用程序 。
写入Kafka主题的记录将保存到磁盘 , 并复制到其他服务器以实现容错 。 由于现代驱动器速度快且体积很大 , 因此非常适合并且非常有用 。 Kafka生产者可以等待确认 , 因此消息是持久的 , 因为在消息复制之前生产者的操作不会完成 。 Kafka磁盘结构可伸缩 。 当批量写入大量流时 , 现代磁盘驱动器具有很高的吞吐量 。
同样 , Kafka的客户和消费者可以控制读取位置(偏移量) , 这允许使用案例 , 例如 , 如果存在严重错误(例如 , 修复错误和重新播放) , 则重播日志 。
Kafka的保留纪录Kafka集群保留所有已发布的记录 。 如果未设置限制 , 它将保留记录 , 直到磁盘空间用完为止 。 您可以设置基于时间的限制(可配置的保留期限) , 基于大小的限制(可根据大小配置)或压缩(使用键保留最新的记录版本) 。 例如 , 您可以将保留策略设置为三天或两周或一个月 。 可以使用主题日志中的记录 , 直到按时间 , 大小或压缩将其丢弃 。 消耗速度不受大小影响 , 因为Kafka始终写入主题日志的末尾 。