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

相机图像质量研究(22)常见问题总结:CMOS期间对成像的影响--光学串扰

光学串扰是一个比较难以理解的光学现象,实际影响往往不大。一、光学串扰产生的原因通常是入射角度太大,光线在不同通道之间产生了混叠二、光学串扰产生的现象光学串扰容易导致迷宫纹。总结本节讲了光学串扰产生的原因,现象。

xiaoshixiu的专栏 1573

【AutoDL + Langchain-Chatchat】从零构建高效本地 RAG 知识库问答系统:实战保姆级教程(含避坑指南)

本文详细阐述如何在AutoDL云平台,如何利用Langchain-Chatchat构建高效的本地RAG知识库问答系统,并深入解析RAG架构。从环境搭建到实战部署,从问题排查到性能优化,提供一份全面实用的指南,助力开发者快速构建智能问答应用。

拾光夕拾的博客 1803

快速学习-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

《信息化项目文档模板十二——业务需求新增/变更审批确认表 》

系列文章目录 《信息化项目文档模板一——项目需求说明书》 《信息化项目文档模板二——项目启动会文档模板》 《信息化项目文档模板三——会议纪要模板》 《信息化项目文档模板四——系统项目蓝图设计模板》 《信息化项目文档模板五——系统详细设计模板》 《信息化项目文档模板六——系统详细设计模板》 《信息化项目文档模板七——系统开发计划模板》 《信息化项目文档模板八——系统功能测试模板》 《信息化项目文档模板九——系统压力测试模板》 《信息化项目文档模板十——系统推广上线计划模板》 《信息化项目文档模板十一——系统用

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1712

kafka streams学习

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

lyd882的博客 273

指纹对抗指南:如何绕过Cloudflare与Akamai的5s盾与浏览器指纹检测

现在的CDN反爬技术虽然越来越强,但是道高一尺魔高一丈,只要掌握了指纹伪造、流量伪装、行为模拟这些核心技术,就可以绕过绝大多数的防护措施。对抗过程中要注意效率和成本的平衡,小规模爬取用Playwright+stealth最方便,大规模爬取用curl_cffi+代理池性价比最高,遇到验证码用打码平台或者自动识别服务,不需要死磕破解。本文介绍的方案已经在实战中验证过,可以绕过95%以上的Cloudflare/Akamai防护,成功率非常高。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 299

基于 YOLOv26 的高速抛物识别系统:微小目标检测

本文提出了一种基于YOLOv26的高速抛物识别系统,专注于微小目标检测。系统采用多模块协同架构,包括视频预处理、YOLOv26检测、目标跟踪和抛物行为分析等模块。关键技术包括YOLOv26s模型检测、DeepSORT目标跟踪和边缘计算部署。通过构建包含多种抛物类型的专业数据集,并应用数据增强技术提升模型性能。系统实现了车辆检测、微小抛物目标识别、抛物轨迹分析和风险等级评估等功能,可实时检测高速公路上的抛物行为并触发告警,为交通管理提供智能化解决方案。

一键难忘的博客 633

kafka streams学习笔记

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

u010199493的博客 1061

STM32外部中断EXTI原理与飞控实时应用实战

外部中断(EXTI)是嵌入式系统中实现事件驱动和实时响应的核心机制,其本质是将外部电平变化转化为可调度的CPU中断事件。基于ARM Cortex-M NVIC架构,EXTI通过GPIO-EXTI-NVIC三级硬件通路实现低延迟信号捕获,具备边沿触发、优先级管理与挂起控制等关键能力。在四轴飞控、工业传感器、人机交互等对毫秒级响应有强需求的场景中,EXTI显著优于轮询方式,兼顾实时性与CPU资源效率。实际开发需严格遵循SYSCFG映射→EXTI配置→NVIC使能的时序逻辑,并规避常见陷阱如中断号误配、伪触发、低

weixin_36382073的博客 66

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

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

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

STM32cubemx配置驱动DHT11模块

本篇文章将带大家学习使用DHT11湿温度模块,使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居,蔬菜大棚等项目当中适用范围广。DHT11 是一种数字式温湿度传感器,由杜邦公司推出。它可以测量环境中的温度和湿度,并将测量结果以数字形式传输给微控制器或其他电子设备,适用于通过数字信号读取环境温湿度的应用场景。DHT11 传感器使用单总线数据交换协议,可以通过一个 I/O 引脚进行控制和数据传输。

m0_49476241的博客 5912

麒麟操作系统提示“默认密钥环已上锁”的解决办法

麒麟操作系统提示“默认密钥环已上锁”的解决办法

太极淘的博客 1万+

Kafka Streams实战项目推荐

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

gitblog_00416的博客 682

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

tiankongyun123的博客 288

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

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

黑泽君 1962

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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、付费专栏及课程。

余额充值