kafka Streams学习

Kafka Streams:深度探索实时流处理应用程序 Kafka Streams 是 Apache Kafka 生态系统中的一部分,它不仅简化了流处理应用的构建,还提供了强大的功能,如事件时间处理、状态管理、交互式查询等。其核心理念是将流处理与事件日志结合,使应用程序能够实时处理数据流。通过深度探索 Kafka Streams 的各个方面,本文为大家提供了更加详细的理解和应用指南。Kafka Streams 不仅提供了强大的流处理功能,还支持容器化、全局状态共享、弹性扩展等特性,使其成为构建实时流处理应用的理想选择。 阅读详情

kafka Streams学习


牢记Kafka Streams是一个Java类库,不是一个流处理框架,这点和Strom等流处理框架有明显的不同

什么是流?

无边界(源源不断)数据集的抽象表示。

为什么要用流式处理:

面向数据流的响应式编程(RP Reactive Programming)已经越来越普及,响应式编程对于无边界数据处理更有优势。 

流的特性:

  • 事件流是有序的。
    • 流数据是自带时序的,无需人工排序。
  • 事件流是不可变的数据记录。
    • 现对于数据库行记录看到的只是最终的结果,流记录了每次变更,是不可变的。
  • 事件流是可以重播的。
    • 如果系统异常或者原有业务处理逻辑优化,可以重复使用流数据,验证、优化业务。

kafka 流的优势:

  • 除了Kafka外,无任何外部依赖
  • 它只是一个类库,它可以非常方便地嵌入任意Java应用中,也可以任意方式打包和部署
  • 支持单事件处理、基于时间窗口连接和聚合处理。
  • 充分利用Kafka分区机制实现水平扩展和顺序性保证
  • 支持正好一次处理语义。
  • 提供记录级的处理能力,从而实现毫秒级的低延迟
  • 通过可容错的state store实现高效的状态操作(如windowed join和aggregation)
  • 支持基于事件时间的窗口操作,并且可处理晚到的数据(late arrival of records)
  • 同时提供底层的处理原语Processor(类似于Storm的spout和bolt),以及高层抽象的DSL(类似于Spark的map/group/reduce)
  • 重放数据能力,便于代码优化,系统恢复。

流式处理场景:

如果追求低延时,高效率,推荐使用请求应答方式的应用。
如果追求的只是消息的消费,那么Kafka Connect【1】可能是一个更好的选择。
流式处理特别适用于数据量较大实时性要求较高的计算类应用,例如实时报表,机器学习,推荐算法等。

示例:

    KStreamBuilder builder = new KStreamBuilder();
    KStream<String, String> stream = builder.stream(Serdes.String(), Serdes.String(), topics);
    stream.filter(new Predicate<String, String>() { (1)
        @Override
        public boolean test(String key, String value) {
            return true;
        }
    }).map(new KeyValueMapper() { (2)
        @Override
        public Object apply(Object key, Object value) {
            String userJson = service.getByOtherId((String) value, "", "", "", "", 1, 0);【2】
            JSONObject jo = JSON.parseObject(userJson);

            if (GlobalRespCodes.SUCCESS.equals(jo.get("respCode"))) {

            } else {
                LOGGER.error("getByOtherId error:");
            }

            return new KeyValue(value, JSON.toJSONString(jo));
        }
    }).to("output"); (3)

    Map<String, Object> configMap =
            KafkaConfigBuilder.buildKafkaConfig(configuration, information, "PullUserFromService");
    StreamsConfig config = new StreamsConfig(configMap);
    streams = new KafkaStreams(builder, config);    

流拓 & Task

这里写图片描述
这里写图片描述

问题:

1. 默认情况下流业务异常,是否会重复消费消息。
    不会,自动提交模式下,会持续处理,最后提交偏移量。
2. 流内调用其它系统超时是否会影响流的处理【2】。
    会重新分配消费,系统判断Consumer异常,发起rebalance。超时的Consumer提交消费消息报CommitFailedException,
    应为该partition已经重新分配给其它Consumer提交失败。 
3. 流处理并发性。
    流处理是多线程运行,默认情况下只启动一个线程,启动线程个数可以配置(num.stream.threads)。
4.  broker如何判定consumer已经停止工作。
    心跳和poll()都不再工作,broker会在session到期后删掉相应的consumer。
5.  Topic,Partition,Task,WorkerThread关系。
    假定Stream的输入Topic有两个(1个Partition数为4,另一个Partition数为3),则总的Task数等于Partition数最多的那个
    Topic的Partition数(max(4,3)=4)。这是因为Kafka Stream使用了Consumer的Rebalance机制,每个Partition对应一
    个Task。系统默认只启动一个WorkerThread,我们可以修改num.stream.threads启动多个线程,线程对应consumer处理对应
    的Task。
    for (TopicPartition partition : records.partitions()) {
        StreamTask task = activeTasksByPartition.get(partition);//初始化Task
        numAddedRecords += task.addRecords(partition, records.records(partition));
    }
6. 流中每个分区的offSet是什么时候提交的。
    poll()获取分区数转为streams对应的task,当task都执行完,一起提交offSet。

关键参数:

auto.offset.reset ,没有偏移量或者偏移量无效的情况下处理方式(latest,earliest)。
heartbeat.interval.ms,向协调器发送心跳的频率,证明该线程还活着(默认:3000ms)。
max.poll.interval.ms ,poll()间隔最长时间,该时间范围内未poll请求,认为该线程已经挂断,重新rebalance。(0.10.2.*开始     
  默认值 300000 改为 Integer.MAX_VALUE.)
session.tomeout.ms ,消费者可以多久不发送心跳,判断整个进程是否还活着(默认:10000ms)。
num.stream.threads 流工作线程个数。

常用命令(0.10.2.*)

显示消费者群组
    kafka-consumer-groups  --bootstrap-server 127.0.0.1:9092 --list
查看指定消费者群组详细信息 
    kafka-consumer-groups  --bootstrap-server 127.0.0.1:9092 --group TSyncer.PullUserService --describe

备注:

【1】 Kafka Connect 主要服务于外部数据存储系统之间(例如:MongoDB同步数据到MySQL)可靠,可伸缩的连接器。
【2】 kafka的作者明确不推荐这种流处理方式。对于设计高性能流处理系统,在内部去调用第三方接口可能严重影响流处理吞吐量,
     最好是提前将数据同步到本地缓存中,推荐系统内调用。
Kafka Stream简介及基本运用(含案例) 参考博客: 1、Kafka Stream背景 1.1 Kafka Stream是什么 Kafka Streams是一套客户端类库,它可以对存储在Kafka内的数据进行流式处理和分析。 1.2 什么是流式计算 流式计算:输入是持续的,一般先定义目标计算,然后数据到来之后将计算逻辑应用于数据,往往用增量计算代替全量计算。 批量计算:一般先有全量数据集,然后定义计算逻辑,并将计算应用于全量数据。特点是全量计算,并且计算结果一次性全量输出。 1.3 为什么要有Kafka Stream 开源流式处理系统有:Spa 阅读详情

相关推荐

详解kafka streams(二)

详解kafka streams包含kafka stream使用操作、ktable、序列化、关联(join)、有状态操作、windowing(窗口)、时间概念、Processor API、kafka stream 测试、错误处理、kafkastream 实现原理、有状态容错、交互式查询

工匠精神coding,终生学习 1246

Kafka(十二)Streams

Kafka因其可靠的消息传递能力,被很多流式处理系统作为唯一可靠的数据来源。常见的流式处理系统有:从0.10.0版本开始,Kafka提供了一个强大的流式处理开发库:Kafka Streams。有了它,开发人员可以直接在程序中进行流式处理,无需再引入上述的外部处理框架。下面一起来进入Streams的世界。我们知道Kafka Streams是用来做流式处理的,那么首先要理解什么是流式处理。 首先,流式处理是一种编程范式,是指实时地处理一个或多个事件流/数据流。首先来比较以下三种常用的编程范式:那么事件流/数据流

yunyun1886358的专栏 2427

Kafka官方文档中文版+Kafka面试题详解!

我们可以在单节点环境上快速实现一个小规模的验证性的程序,只要程序能在多节点的集群环境成功运行即可部署到高负载的生产环境。Kafka Streams 通过利用Kafka 的并行模型实现对相同应用程序的多个实例的负载平衡,这对于用户来说是透明的。接下来就进入了实操阶段,基本原理,基础概念了解清楚之后正式开始上手,这一部分的内容会比较多,是基于LinkedIn使用Kafka作为生产系统的一些使用经验。这一部分是学习Kafka的准备阶段,Kafka的发展,使用案例,下载及历史版本,都在这一部分进行了详细的描述。

weixin_43507410的博客 1496

Kafka的多任务线程消费测试

代码: package com.weichai.kafka; import kafka.consumer.ConsumerIterator; import kafka.consumer.KafkaStream; /** * 消费者的线程执行 * @author lhy * @date 2018.10.09 */ public class Consumer implements Ru...

汉南最後の読書人 1212

从ViT到CLIP:OpenAI如何用4亿张图‘教会’AI看懂世界?一次讲透对比学习与Prompt工程

本文深入解析OpenAI的CLIP模型如何通过4亿图文对的对比学习实现跨模态理解,详细探讨了对比学习、数据构建、模型架构及Prompt工程等核心技术。CLIP利用Transformer架构和精心设计的Prompt模板,在Zero-Shot分类、图像检索等场景展现出强大能力,为多模态AI应用开辟新方向。

weixin_27027459的博客 372

微生物组β-多样性——PCoA分析及可视化

让你的数据映入眼帘

qq_47369980的博客 1万+

快速学习-Kafka Streams

第6章 Kafka Streams 6.1 概述 6.1.1 Kafka Streams Kafka Streams。Apache Kafka开源项目的一个组成部分。是一个功能强大,易于使用的库。用于在Kafka上构建高可分布式、拓展性,容错的应用程序。 6.1.2 Kafka Streams特点 1)功能强大 高扩展性,弹性,容错 2)轻量级 无需专门的集群 一个库,而不是框架 3)完全集成 1...

逍遥云恋 642

YOLOv5改进——添加SimAM注意力机制

这样可以使注意力机制看到整个backbone部分的特征图,将具有全局视野,类似于一个小的transformer结构。注意:很多改进教程都是将代码直接复制到common.py文件,如果改进机制多了容易造成混乱。在models文件夹下新建modules文件夹,在modules文件夹下新建一个py文件。这里为simam.py。在models文件夹下,复制yolov5s.yaml文件,粘贴并重命名为yolov5s-simam.yaml。运行yolo.py,出现刚刚加入的SimAM注意力机制,说明加入成功。

2302_80099075的博客 1653

kafka streams学习

项目源码:https://github.com/NickyWooden/kafka-streams-demo.git Kafka streams是kafka提供的用于实时流计算的类库,支持各种窗口操作、支持事件时间、支持水印、多个流join操作、状态及容错,可与kafka或其他消息系统结合使用,用于将订阅kafka topic数据实时处理后结果推回kafka或其他消息系统 相比于其他实时流处理...

lyd882的博客 273

麒麟操作系统Kylin如何从 2203 升级到 2403

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;开始升级流程第一步:升级前准备1. 确认版本为 V10 SP1 22032. 备份全部重要数据3. 确保网络稳定4. 关闭应用第二步:选择升级方式方法一:图形界面升级方法二:命令行升级1. 更新现有系统至最新2. 启动“系统升级”工具3. 检测并开始下载2403。

让编程变的很简单!! 2670

NXP ChessDE的安装和激活

如果客户申请的是试用版,那么一份为期 30 天的 License 将会发送申请人的账号或邮箱中,客户使用该文件进行安装即可。② 将“VENDOR snpslmd /path/to/snpslmd”中的“/path/to/snpslmd”替换成 snpslmd.exe 实际存放路径(位于 SCL 安装目录下的 win32\bin 文件夹中,默认安装的情况下就是“VENDOR snpslmd C:\Synopsys\SCL\<version>\win32\bin\snpslmd.exe”)。

weixin_47351160的博客 2045

kafka streams学习笔记

流式处理 流式处理是利用连续计算来处理无限数据流的能力,因为数据流是流动的。所以无须收集或存储数据以对其进行操作 这个弹珠图是流式处理的一个简单表示。图中每个圆圈代表某一特定时间点的某些信息或发生的事件,事件的数量是无限的,并且不断地从左往右移动 2.处理购买交易 publicclassZMartKafkaStreamsApp{ pr...

u010199493的博客 1061

大疆OcuSync vs 传统2.4GHz:深度拆解无人机图传射频模块的硬件差异

本文深度对比了大疆OcuSync与传统2.4GHz无人机图传射频模块的硬件差异,涵盖芯片组、天线系统、PCB设计、散热方案及生产测试等核心环节。重点解析OcuSync的全定制SoC芯片、智能MIMO天线阵列及精密PCB布局如何实现革命性性能提升,为无人机图传技术发展提供专业参考。

u5v6w7的博客 806

尚硅谷kafka学习笔记(六)Kafka Streams

而Spark Streaming基于Apache Spark,可以非常方便与图计算,SQL处理等集成,功能强大,对于熟悉其它Spark应用开发的用户而言使用门槛低。另外,目前主流的Hadoop发行版,如Cloudera和Hortonworks,都集成了Apache Storm和Apache Spark,使得部署更容易。事实上,Kafka基本上是主流的流式处理系统的标准数据源。而Kafka Stream作为流式处理类库,直接提供具体的类给开发者调用,整个应用的运行方式主要由开发者控制,方便使用和调试。

老猫喜欢今日爬山的博客 149

爬虫面试:关于爬虫破解验证码的13个经典面试题

​解释:验证码是一种用于区分人类用户和自动化程序(如爬虫)的技术,通常通过显示图形、文字或音频等方式,要求用户完成特定任务(如识别扭曲的字母、点击特定区域等)。​作用:防止恶意爬虫滥用网站资源、进行批量注册、登录破解等行为,保护网站的安全性和数据的完整性。

数据知道的博客 1万+

第6章: MMU Notifier在KVM虚拟化中的应用

本文分析了KVM如何利用MMU Notifier机制维护客户机与宿主机地址映射一致性。KVM采用三层地址空间转换架构(GVA→GPA→HPA),通过硬件辅助虚拟化(EPT/NPT)实现高效转换。重点探讨了KVM MMU Notifier回调实现,包括invalidate_range_start/end等核心函数,以及HVA范围处理流程。当宿主机内存变化时,KVM通过注册的notifier回调及时更新映射关系,确保虚拟化环境的内存一致性。文章详细解析了相关数据结构和关键代码实现,揭示了KVM内存管理的核心机制

图形/计算GPU的驱动与虚拟化技术分享园地 2324

Kafka Streams实战项目推荐

Kafka Streams实战项目推荐 项目介绍 欢迎来到《Kafka Streams实战》源代码项目!本项目包含了书中所有示例代码的实现,旨在帮助读者深入理解Kafka Streams的强大功能和应用场景。无论你是Kafka Streams的初学者还是有经验的开发者,本项目都能为你提供丰富的实战经验和代码参考。 项目技术分析 本项目主要基于Kafka Streams构建,Kafka Stream...

gitblog_00416的博客 682

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

网易云课堂学习-kafka streams架构

程序重启后才会从服务端拿offset,来决定从哪里消费。 客户端会维护一个partition_id和offset,以此知道下次从哪里开始拉取。 批处理计算: 会有一定的延时,只能查到昨天的数据 Spark和Flink既能做批处理,又能做流处理 pageCache:操作系统的内存 kafka写性能高的原因:1.用了pageCache 2.使用了顺序写 通过mapped memory file技术将数据写到pageCache中,达到顺序写的目的,并且将操作系统的内存应用起来。 一个Partition.

tiankongyun123的博客 288

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

大数据技术之_10_Kafka学习_Kafka概述+Kafka集群部署+Kafka工作流程分析+Kafka API实战+Kafka Producer拦截器+Kafka Streams

大数据技术之_10_Kafka学习_Kafka概述+Kafka集群部署+Kafka工作流程分析+Kafka API实战+Kafka Producer拦截器+Kafka Streams

黑泽君 1962

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Kafka Streams 示例项目介绍

Kafka Streams 示例项目介绍 Kafka Streams 是 Apache Kafka 的一个客户端库,用于在 Kafka 之上构建高性能、可扩展的流处理应用程序。该项目提供了一系列使用 Kafka Streams 的代码示例。以下是关于这个开源项目的基础介绍和主要特点。 1. 项目基础介绍与主要编程语言 该项目是一个开源的 Kafka Streams 示例集合,旨在帮助开发者更好地理...

gitblog_00515的博客 352

掌握Kafka Streams与KSQldb:实时数据处理的新纪元

掌握Kafka Streams与KSQldb:实时数据处理的新纪元 在当今大数据时代,实时流处理已经成为企业竞争优势的关键。Apache Kafka作为业界广泛采用的消息中间件,其强大的扩展性和高吞吐量特性使其成为实时数据处理的理想选择。而Kafka Streams和KSQldb正是基于Kafka构建的高效、易用的数据处理工具。本文将深入探讨这两个项目,并解释它们如何帮助开发者实现复杂的数据流操作...

gitblog_00031的博客 650

Kafka Streams in Action 实战教程

Kafka Streams in Action 实战教程 本教程基于 bbejeck/kafka-streams-in-action 开源项目,旨在指导您如何理解和应用该项目中的代码示例来深入学习 Apache Kafka Streams。我们将依次解析项目的目录结构、启动文件以及配置文件,帮助您快速上手。 1. 项目目录结构及介绍 此开源项目遵循了一般Java Maven项目的标准结构,下面是其...

gitblog_00740的博客 1039

Pachyderm与流处理集成:Kafka Streams/Flink实时数据处理完全指南

在现代数据驱动时代,实时数据处理已成为企业竞争力的关键因素。Pachyderm作为领先的分布式数据仓库和数据处理平台,通过与Kafka Streams和Flink等流行流处理框架的无缝集成,为数据工程师提供了强大的实时数据处理能力。本文将详细介绍如何利用Pachyderm构建高效的流处理管道,实现数据的实时分析和机器学习。🚀 ## 什么是Pachyderm流处理? Pachyderm是一个开

gitblog_00099的博客 832

分布式编程工具Akka Streams、Kafka Streams和Spark Streaming大PK

众所周知,作为一个事件流平台,Kafka能够松散地驻留在面向消息的中间件(Message-oriented Middleware,MoM)空间里。而被称为Actor模型的Akka,是一个基于响应、容错和消息传递的同步计算过程。

java_beautiful的博客 593

探索Kafka Streams:构建实时流处理应用

探索Kafka Streams:构建实时流处理应用 在这个日益数据驱动的世界中,实时处理和分析正在成为业务成功的关键因素。Apache Kafka作为一个强大的分布式消息系统,已经赢得了广泛的认可。而Kafka Streams库则将Kafka的功能提升到了一个新的层次,它允许开发者直接在Kafka上进行复杂的数据流处理,无需任何外部存储或计算引擎。本文将向您推荐一个开源项目——kafka-stre...

gitblog_00012的博客 421

基于jmx监控kafka_关于Kafka知识看这一篇就够了,Apache Kafka互联网实战整理PDF

Apache Kafka是由Apache软件基金会开发的一个开源消息系统项目,由Scala写成。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。Kafka是一个分布式的、分区的、多复本的日志提交服务。它通过一种独一无二的设计提供了一个消息系统的功能,让我一起来看看关于Apache Kafka的实战操作吧!由于整个PDF文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。关于...

weixin_36349918的博客 232
上一篇: 生产Redis内存碎片过高排查
下一篇: 消息驱动响应式系统案例(洗碗的七种方式)
AI干IT
博客等级 码龄18年 50粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值