共计 1404 个字符,预计需要花费 4 分钟才能阅读完成。
kafka 简介
定义
kafka 是一个分布式的数据流平台
数据流平台有 3 个关键特性:
- 发布订阅记录流 (streams of records),类似于消息队列或企业级的消息传递系统
- 以容错的持久化方式存储记录流
- 当记录流产生时,进行相应处理
kafka 通常用于两大类应用:
- 构建用于系统和应用间可靠的获取数据的实时数据流管道
- 构建转换或响应数据流的实时流应用程序
简单的说
- 可以作为一个可靠的数据流管道
- 用于处理实时数据流的应用程序
总的来说
kafka 是一个提供(实时)读写数据流的分布式中间件,并提供对记录流的持久化功能
基础概念
- kafka 作为集群可运行在一台或多台服务器上,可跨多个数据中心
- kafka 使用 topic 对存储的记录流进行分类
- 一条记录(消息)由 key,value 和 timestamp(时间戳) 组成
- kafka 集群中的每个节点称之为 broker
特性
- 高吞吐,低延迟
- 可扩展,可动态增加节点,可重新分配分区( 热扩展对运行中程序的影响待确认 )
- 持久性,可靠性:支持数据持久化到硬盘,并支持副本机制,
- 容错性:允许集群中节点失败(若副本数量为 n, 则允许 n - 1 个节点失败)
- 高并发:支持数千个客户端同时读写
应用场景
消息队列 (Messaging)
可代替传统消息队列:解耦,缓存消息
- 低延迟
- 强大的持久化保证
网站活动跟踪(Website Activity Tracking)
用户网站的活动(page views, searches, other)根据类型被发布到不同的 topic,这些被发布到 topics 中的数据可以作为数据源被应用在不同的场景:实时处理程序,实时监控,被加载至 Hadoop 或离线数据仓库进行数据的离线处理和报告等。
因为活动信息量非常大,主要用到以下特性
- 高吞吐量
- 度量 (Metrics)
kafka 通常用于监控一些可操作的数据 (operational monitoring data)。涉及从分布式应用程序中汇总统计信息,然后生成集中的数据源
- 日志聚合 (Log Aggregation)
许多人使用 kafka 来替代日志聚合解决方案。日志收集系统通常从服务器收集物理日志文件,并将其载入一个中心系统(文件服务器或 HDFS)进行处理。与 Scribe(Facebook 开源的日志收集系统),Flume(Flume 最早是 Cloudera 提供的日志收集系统,目前是 Apache 下的一个孵化项目,Flume 支持在日志系统中定制各类数据发送方,用于收集数据)等以日志为中心的系统相比,kafka 具备同样出色的性能,更强的耐用性(副本机制)和更低的端到端延迟
- 流处理 (Stream Processing)
处理由多个阶段组成的处理管道中的数据。从一个 topic 中消费,然后汇总,转换为新的 topic 供后续处理。如新闻推荐:抓取数据发布到 topic1-> 读取数据,格式化,去重 ->topic2-> 读取数据推荐给用户
- 事件朔源 (Event Sourcing)
Event Sourcing 就是基于时间记录一个对象的所有事件,进而根据一系列事件来得到其状态(记录事件而非状态,有点像 binlog)。Kafka 可以存储非常多的日志数据,为基于 event sourcing 的应用程序提供强有力的支持
- 提交日志
kafka 可以从外部为分布式系统提供日志提交功能。该日志有助于在节点之间复制数据,并充当故障节点恢复其数据的重新同步机制,kafka 的日志压缩(不是压缩算法,而是日志的清理,合并机制)特性支持这一用法。