Kafka核心技术与实战
胡夕
人人贷计算平台部总监,Apache Kafka Contributor
立即订阅
8408 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么要学习Kafka?
免费
Kafka入门 (5讲)
01 | 消息引擎系统ABC
02 | 一篇文章带你快速搞定Kafka术语
03 | Kafka只是消息引擎系统吗?
04 | 我应该选择哪种Kafka?
05 | 聊聊Kafka的版本号
Kafka的基本使用 (3讲)
06 | Kafka线上集群部署方案怎么做?
07 | 最最最重要的集群参数配置(上)
08 | 最最最重要的集群参数配置(下)
客户端实践及原理剖析 (14讲)
09 | 生产者消息分区机制原理剖析
10 | 生产者压缩算法面面观
11 | 无消息丢失配置怎么实现?
12 | 客户端都有哪些不常见但是很高级的功能?
13 | Java生产者是如何管理TCP连接的?
14 | 幂等生产者和事务生产者是一回事吗?
15 | 消费者组到底是什么?
16 | 揭开神秘的“位移主题”面纱
17 | 消费者组重平衡能避免吗?
18 | Kafka中位移提交那些事儿
19 | CommitFailedException异常怎么处理?
20 | 多线程开发消费者实例
21 | Java 消费者是如何管理TCP连接的?
22 | 消费者组消费进度监控都怎么实现?
深入Kafka内核 (5讲)
23 | Kafka副本机制详解
24 | 请求是怎么被处理的?
25 | 消费者组重平衡全流程解析
26 | 你一定不能错过的Kafka控制器
27 | 关于高水位和Leader Epoch的讨论
管理与监控 (12讲)
28 | 主题管理知多少?
29 | Kafka动态配置了解下?
30 | 怎么重设消费者组位移?
31 | 常见工具脚本大汇总
32 | KafkaAdminClient:Kafka的运维利器
33 | Kafka认证机制用哪家?
34 | 云环境下的授权该怎么做?
35 | 跨集群备份解决方案MirrorMaker
36 | 你应该怎么监控Kafka?
37 | 主流的Kafka监控框架
38 | 调优Kafka,你做到了吗?
39 | 从0搭建基于Kafka的企业级实时日志流处理平台
高级Kafka应用之流处理 (3讲)
40 | Kafka Streams与其他流处理平台的差异在哪里?
41 | Kafka Streams DSL开发实例
42 | Kafka Streams在金融领域的应用
结束语 (1讲)
结束语 | 以梦为马,莫负韶华!
特别放送 (2讲)
加餐 | 搭建开发环境、阅读源码方法、经典学习资料大揭秘
用户故事 | 黄云:行百里者半九十
Kafka核心技术与实战
登录|注册

41 | Kafka Streams DSL开发实例

胡夕 2019-09-07
你好,我是胡夕。今天我要和你分享的主题是:Kafka Streams DSL 开发实例。
DSL,也就是 Domain Specific Language,意思是领域特定语言。它提供了一组便捷的 API 帮助我们实现流式数据处理逻辑。今天,我就来分享一些 Kafka Streams 中的 DSL 开发方法以及具体实例。

Kafka Streams 背景介绍

在上一讲中,我们提到流处理平台是专门处理无限数据集的引擎。就 Kafka Streams 而言,它仅仅是一个客户端库。所谓的 Kafka Streams 应用,就是调用了 Streams API 的普通 Java 应用程序。只不过在 Kafka Streams 中,流处理逻辑是用拓扑来表征的。
一个拓扑结构本质上是一个有向无环图(DAG),它由多个处理节点(Node)和连接节点的多条边组成,如下图所示:
图中的节点也称为处理单元或 Processor,它封装了具体的事件处理逻辑。Processor 在其他流处理平台也被称为操作算子。常见的操作算子包括转换(map)、过滤(filter)、连接(join)和聚合(aggregation)等。后面我会详细介绍几种常见的操作算子。
大体上,Kafka Streams 开放了两大类 API 供你定义 Processor 逻辑。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Kafka核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(8)

  • 明翼
    单词计数里面的groupBy算子里面的key和value不太明白,不太明确那,为什么最后还要count计数

    作者回复: groupBy之后才能进行各种aggregation操作,比如count。groupBy要指定根据什么进行group,这就是key

    2019-09-09
    1
  • lmtoo
    第一个例子没有时间窗口的情况下,统计的是什么?最终单词的计数,还是某个时间段的计数

    作者回复: 截止到程序运行时

    2019-09-07
    1
  • leige
    stream和table都会有对应的topic吧,老师?他们的本质区别是什么?

    作者回复: 在topic层面,它们的区别反映在cleanup.policy上:stream是non-compact的topic;table是compact的topic

    2019-12-09
  • hunterlodge
    老师,我们领导提出了这样一些需求:1. 可以根据消息中的字段查询消息内容,这样可以用来诊断消息确实写入了kafka;2. 可以对某些消息重放;3. 可以对某些消息打标记从而控制消息的消费。我调研了一圈,第一点貌似可以用confluent的ksql做到,但是需要引入ksql server等复杂性,第二点也可以基于ksql来复制消息到重放队列(这样每一个topic都会存在一个重放topic)。第三点暂时还没有很好的思路。求助老师更好的方案,谢谢!

    作者回复: 第三点使用Interceptor试试呢?

    2019-11-27
  • 达文西
    感觉打开了新世界的大门,虽然暂时在业务上用不上
    2019-11-27
  • hunterlodge
    老师,我有几个疑问:
    1. 如果客户端应用重启了,KTable及写入的KStream在重启前的状态就都清楚了对吗?如果是的话,重启后,单词计数要重新对队列中的所有数据从头到尾再次计算,对吗?
    2. 在没有指定时间窗口的情况下,应用读取队列消息的周期是什么呢?Stream API也是通过poll方式读取队列数据吗?
    3. “所以,事件的 Key 也必须要携带时间窗口的信息。”,这里携带时间窗口信息是指什么呢?能举个例子吗?

    谢谢!

    作者回复: 1. 不需要,它会记录消费位移的
    2. 也是通过poll的,因为本质上就是consume-process-produce的流程
    3. “事件的 Key 也必须要携带时间窗口的信息” 这句话是指因为引入了时间窗口,所以key中带了时间窗口的信息,比如窗口开始时间,结束时间等

    2019-11-12
  • 曾轼麟
    老师有个疑问,如果按照这个事例,我使用kafka普通client的batch方式消费,搭载JAVA8的lambda不是实现更快捷吗?而且我中间还能自己通过代码写入各种数据库或者其它持久化方式?lambda本身也支持map—reduce的方式计算,而且consumer group本身也是一种负载均衡的思路

    作者回复: 如果你自己写java代码肯定是可以的,不过这样你就要自行处理负载均衡、故障转移等问题了啊

    2019-09-10
  • icejoywoo
    count之前加上.windowedBy(TimeWindows.of(Duration.ofMinutes(5))),应该就可以了吧

    作者回复: 是的:)

    2019-09-07
    1
收起评论
8
返回
顶部