共计 2010 个字符,预计需要花费 6 分钟才能阅读完成。
1 四个核心 API
● Producer API
允许一个应用程序发布一串流式的数据到一个或者多个 Kafka topic。
● Consumer API
允许一个应用程序订阅一个或多个 topic , 并且对发布给他们的流式数据进行处理。
● Streams API
允许一个应用程序作为一个流处理器,消费一个或者多个 topic 产生的输入流, 然后生产一个输出流到一个或多个 topic 中去,在输入输出流中进行有效的转换。
● Connector API
允许构建并运行可重用的生产者或者消费者,将 Kafka topics 连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table) 的所有变更内容。
在 Kafka 中,客户端和服务器之间的通信是通过简单,高性能,语言无关的 TCP 协
议完成的。此协议已版本化并保持与旧版本的向后兼容性。Kafka 提供多种语言客
户端。
2 Kafka API – producer
- Producer 会为每个 partition 维护一个缓冲,用来记录还没有发送的数据, 每个缓冲区大小用 batch.size 指定,默认值为 16k.
- linger.ms 为,buffer 中的数据在达到 batch.size 前,需要等待的时间
- acks 用来配置请求成功的标准
- send 异步方法
3 Kafka API – Consumer
3.1 Simple Cnsumer
位于 kafka.javaapi.consumer 包中,不提供负载均衡、容错的特性每次获取数据都要指定 topic、partition、offset、fetchSize
3.2 High-level Consumer
该客户端透明地处理 kafka broker 异常,透明地切换 consumer 的 partition, 通过和 broker 交互来实现 consumer group 级别的负载均衡。
- Group
4 整体架构
5 使用场景
5.1 消息系统
消息系统被用于各种场景,如解耦数据生产者,缓存未处理的消息。Kafka 可作为传统的消息系统的替代者,与传统消息系统相比,kafka 有更好的吞吐量、更好的可用性,这有利于处理大规模的消息。
根据经验,通常消息传递对吞吐量要求较低,但可能要求较低的端到端延迟,并经常依赖 kafka 可靠的 durable 机制。
在这方面,Kafka 可以与传统的消息传递系统 (ActiveMQ 和 RabbitMQ) 相媲美。
5.2 存储系统
写入到 kafka 中的数据是落地到了磁盘上,并且有冗余备份,kafka 允许 producer 等待确认, 通过配置,可实现直到所有的 replication 完成复制才算写入成功,这样可保证数据的可用性。
Kafka 认真对待存储,并允许 client 自行控制读取位置,你可以认为 kafka 是 - 种特殊的文件系统,它能够提供高性能、低延迟、高可用的日志提交存储。
5.3 日志聚合
日志系统一般需要如下功能: 日志的收集、清洗、聚合、存储、展示。
Kafka 常用来替代其他日志聚合解决方案。(官方说法, 略有夸大嫌疑)
和 Scribe、Flume 相 比,Kafka 提供同样好的性能、更健壮的堆积保障、更低的端到端延迟。
日志会落地,导致 kafka 做 日志聚合更昂贵
kafka 可实现日志的清洗(需要编码)、聚合(可靠但昂贵, 因为需要落地磁盘)、存储。
ELK 是现在比较流行的日志系统。在 kafka 的配合 下才是更成熟的方案,kafka 在 ELK 技术栈中,主要起到 buffer 的作用,必要时可进行日志的汇流。.
5.4 跟踪网站活动
kafka 的最初始作用就是,将用户行为跟踪管道重构为一组实时发布 - 订阅源。
把网站活动 (浏览网页、搜索或其他的用户操作) 发布到中心 topics 中, 每种活动类型对应一个 topic。基于这些订阅源,能够实现一系列用例,如实时处理、实时监视、批量地将 Kafka 的数据加载到 Hadoop 或离线数据仓库系统,进行离线数据处理并生成报告。
每个用户浏览网页时都生成了许多活动信息,因此活动跟踪的数据量通常非常大。(Kafka 实际应用)
5.5 流处理 – kafka stream API
Kafka 社区认为仅仅提供数据生产、消费机制是不够的,他们还要提供流数据实时处理机制
从 0.10.0.0 开始, Kafka 通过提供 Strearms API 来提供轻量,但功能强大的流处理。实际上就是 Streams API 帮助解决流引用中一些棘手的问题,比如:
- 处理无序的数据
- 代码变化后再次处理数据
- 进行有状态的流式计算
Streams API 的流处理包含多个阶段,从 input topics 消费数据,做各种处理,将结果写入到目标 topic, Streans API 基于 kafka 提供的核心原语构建,它使用 kafka consumer、producer 来输入、输出,用 Kfka 来做状态存储。
流处理框架: flink spark streamingJ Stortm、Samza 本是正统的流处理框架,Kafka 在流处理中更多的是扮演流存储的角色。
本文由博客一文多发平台 OpenWrite 发布!