一文弄懂事件Event与Kafka的区别

2023-12-19


事件(Event)和 Apache Kafka 是两个概念层面上有所不同的东西,它们在应用程序中的作用和使用场景也有很大的差异。

1. 概念和定义

事件(Event): 事件是 系统内发生 的特定事情或状态变化的表示。在编程和软件设计中,事件通常被用于解耦系统中的不同部分,以及在不同模块之间传递信息。事件可以是内建的,也可以是自定义的。

Kafka: Apache Kafka 是一个分布式流处理平台,主要用于构建实时数据管道和流应用程序。它提供了持久性、容错性、伸缩性和高吞吐量的消息传递系统,通过分布式发布-订阅机制,允许 多个应用程序或服务之间以实时的方式交换数据

2. 应用场景

事件: 事件通常用于处理应用程序内部的状态变化或业务逻辑触发的行为。例如,用户注册成功、订单支付完成等都可以作为事件在应用内部传播。

Kafka: Kafka 通常用于处理系统之间的异步消息传递,特别是在分布式和微服务架构中。它使得不同服务可以通过消息传递方式进行解耦,实现松耦合的系统架构。

3. 通信方式

事件: 事件通常通过事件发布者和事件监听器之间的 观察者模式 进行通信。事件发布者发布事件,而监听器监听并响应这些事件。

Kafka: Kafka 使用 发布-订阅模型 ,其中消息生产者发布消息到 Kafka 主题,而消息消费者从主题中订阅并消费这些消息。这是一种分布式的、异步的通信方式。

4. 消息传递方式

事件: 事件通常是 同步的 ,即事件发布者发布事件后,会等待事件监听器处理完成。这是在单个应用程序内的同步通信方式。

Kafka: Kafka 提供 异步 的消息传递方式,消息生产者将消息发布到主题后不需要等待消费者的响应。这种异步性质使得 Kafka 非常适合处理大量实时数据的场景。

5. 数据持久性

事件: 事件通常是瞬时的,只在应用程序内传递,并不具备持久性。

Kafka: Kafka 提供持久性存储,消息被持久化到 Kafka 主题中,允许消息在一段时间内被多个消费者消费,保证了数据的持久性。

6 事件(Event)的工作原理和实现

工作原理:
事件定义: 事件是应用程序内的特定事情或状态变化的表示,通常通过继承 ApplicationEvent 类或实现 ApplicationEvent 接口来定义。

事件发布: 当事件发生时,通过 Spring 的 ApplicationEventPublisher 接口将事件发布到应用程序上下文。

监听器注册: 使用 @EventListener 注解标注的方法会被注册为事件监听器,监听特定类型的事件。

事件处理: 当事件被发布时,与之关联的监听器方法将被调用,执行事件处理逻辑。

// 定义事件
public class MyCustomEvent extends ApplicationEvent {
    public MyCustomEvent(Object source) {
        super(source);
    }
}

// 事件发布者
@Component
public class MyEventPublisher {
    @Autowired
    private ApplicationEventPublisher eventPublisher;

    public void publishEvent() {
        MyCustomEvent event = new MyCustomEvent(this);
        eventPublisher.publishEvent(event);
    }
}

// 事件监听器
@Component
public class MyEventListener {
    @EventListener
    public void handleEvent(MyCustomEvent event) {
        // 处理事件逻辑
    }
}

7 Apache Kafka 的工作原理和实现

工作原理:
Kafka 主题: Kafka 使用主题(Topic)来组织消息,消息生产者将消息发布到主题,而消息消费者从主题中订阅消息。

消息生产: 消息生产者将消息发送到 Kafka 主题,消息可以是任意格式的字节流。

消息消费: 消息消费者通过订阅 Kafka 主题,从中拉取消息。每个消费者都有自己的消费者组(Consumer Group)。

分区和副本: Kafka 主题可以分为多个分区,每个分区可以有多个副本。这提供了数据的横向伸缩和容错性。

// Kafka 生产者
public class KafkaProducerExample {
    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.put("bootstrap.servers", "localhost:9092");
        properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        Producer<String, String> producer = new KafkaProducer<>(properties);

        ProducerRecord<String, String> record = new ProducerRecord<>("my_topic", "key", "value");

        producer.send(record);
        producer.close();
    }
}

// Kafka 消费者
public class KafkaConsumerExample {
    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.put("bootstrap.servers", "localhost:9092");
        properties.put("group.id", "my_group");
        properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

        KafkaConsumer<String, String> consumer = new KafkaConsumer<>(properties);

        consumer.subscribe(Arrays.asList("my_topic"));

        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
            for (ConsumerRecord<String, String> record : records) {
                // 处理接收到的消息
                System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
            }
        }
    }
}

Kafka 生产者将消息发送到名为 "my_topic" 的主题,并且消费者从该主题中订阅并处理消息。

总结:

事件和 Kafka 是两个不同层面的概念,事件通常用于应用程序内部的状态变化,而 Kafka 则是一个分布式消息系统,用于实现不同系统或服务之间的异步消息传递。在系统设计中,可以根据具体需求选择使用事件或 Kafka,甚至在复杂系统中同时使用它们来实现不同层次的通信和解耦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文弄懂事件Event与Kafka的区别 的相关文章

  • 微服务框架

    微服务框架 1 SOA思想 面向服务的架构 SOA 是一个组件模型 它将应用程序的不同功能单元 称为服务 进行拆分 并通过这些服务之间定义良好的接口和协议联系起来 接口是采用中立的方式进行定义的 它应该独立于实现服务的硬件平台 操作系统和编
  • 记录一次生产环境MySQL死锁以及解决思路

    一 背景 1 业务背景 这里因为涉及到公司的业务问题不进行深入讨论 下面换成通用的一些业务场景就是举例 2 技术背景 众所周知 所谓锁的产生本质上是想解决资源竞争问题 在MySQL的前提下 MySQL为了解决事务并发独写的问题 在进行ins
  • Kafka——Mac搭建kafka环境

    1 下载Kafka安装包 下载地址 将压缩包移动到 usr local mv kafka 2 12 3 1 0 tgz usr local 解压 tar zxvf kafka 2 12 3 1 0 tgz 2 启动 启动zookeeper
  • 安装并配置HBase集群(5个节点)

    安装并配置HBase 集群规划 HBase2 2 5安装 将安装包拷贝到5台机器上并解压缩 配置环境变量 配置HBase 时间同步 修改 usr local src hbase 2 2 5 conf hbase env sh 文件 修改 h
  • Kafka 监控系统Eagle 使用教程 V1.4.0

    1 下载安装zookeeper 2 下载安装kafka 3 下载安装kafka eagle http download kafka eagle org tar zvxf kafka eagle bin 1 4 0 tar gz 4 配置JA
  • Hadoop 完全分布式运行实战

    Hadoop运行模式包括 本地模式 伪分布式模式以及完全分布式模式 Hadoop官方网站 Apache Hadoop 流程步骤 准备3台客户机 关闭防火墙 静态ip 主机名称 安装JDK 配置环境变量 安装Hadoop 配置环境变量 配置集
  • kafka的新API 得到最新一条数据

    业务的需要 需要得到最新的一条消息从kafka中 但是发现ConsumerRecords 这个对象并没有 get index 这种方式的获取并且只能 iterator 或者增强for 循环这种方式来循环 记录 但是有一个count 可以得到
  • 在异构系统中学习应用的流迭代分布式编码计算研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 在异构系统中学习应用的流迭代分布式编码计算研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 什么是自动化测试,看完你就懂了!

    随着互联网技术的飞速发展 软件本身的规模和复杂度也是逐步增加 为了保证软件项目能够保质保量交付到客户手中 软件测试环节就显得非常重要了 它可以看作是软件项目交付给客户最后一道安全保证 今天给大家聊聊软件测试当中自动化测试相关的知识 希望对大
  • 深入理解软件测试中的Web请求流程!

    在软件开发的过程中 软件测试是不可或缺的一环 它有助于确保软件系统的稳定性 可靠性和安全性 而在众多测试中 Web请求流程的测试显得尤为重要 因为几乎所有的现代应用都离不开网络交互 接下来我们将深入探讨软件测试中完整的Web请求流程 帮助大
  • 【ranger】CDP环境 更新 ranger 权限策略会发生低概率丢失权限策略的解决方法

    一 问题描述 我们的 kafka 服务在更新 添加 ranger 权限时 会有极低的概率导致 MM2 同步服务报错 报错内容 Not Authorized 但是查看 ranger 权限是赋予的 并且很早配置的权限策略也会报错 相关组件版本
  • 不会做项目惨遭部门领导批评,连刷35天分布式小册轻松拿下

    互联网发展到今天 用户数量越来越多 产生的数据规模也越来越大 应用系统必须支持高并发访问和海量数据处理的需求 对比集中式架构 分布式系统由于具有可扩展性 可以动态扩展服务和存储节点 使用廉价的机器构建高性能的服务 更适合如今的互联网业务 分
  • 一文弄懂事件Event与Kafka的区别

    事件 Event 和 Apache Kafka 是两个概念层面上有所不同的东西 它们在应用程序中的作用和使用场景也有很大的差异 1 概念和定义 事件 Event 事件是 系统内发生 的特定事情或状态变化的表示 在编程和软件设计中 事件通常被
  • 各种不同语言分别整理的拿来开箱即用的8个开源免费单点登录(SSO)系统

    各种不同语言分别整理的拿来开箱即用的8个开源免费单点登录 SSO 系统 单点登录 SSO 是一个登录服务层 通过一次登录访问多个应用 使用SSO服务可以提高多系统使用的用户体验和安全性 用户不必记忆多个密码 不必多次登录浪费时间 下面推荐一
  • 终于找到了最新版的Zookeeper入门级教程,建议收藏!

    小熊学Java https javaxiaobear cn 1 分布式一致性 1 CAP 理论 CAP 理论指出对于一个分布式计算系统来说 不可能同时满足以下三点 一致性 在分布式环境中 一致性是指数据在多个副本之间是否能够保持一致的特性
  • 网站被攻击了怎么恢复?如何在被攻击后第一时间接入高防恢复正常访问?

    网站受到攻击的原因是多种多样的 包括技术漏洞 人为疏忽 社会工程学等各种因素 保护网站的安全需要综合运用技术手段 当网站遭到攻击时 以下几个步骤可以帮助恢复网站的正常运行 1 分析攻击 首先要确认网站被攻击的类型和程度 以确定所需的恢复步骤
  • 华纳云:ServiceComb如何实现zipkin分布式调用链追踪

    Apache ServiceComb是一个开源的微服务框架 它提供了分布式系统开发所需的一系列工具和服务 在ServiceComb中 实现分布式调用链追踪可以通过整合Zipkin来实现 Zipkin是一个开源的分布式追踪系统 它可以帮助你跟
  • Spark 中 BroadCast 导致的内存溢出(SparkFatalException)

    背景 本文基于 Spark 3 1 1 open jdk 1 8 0 352 目前在排查 Spark 任务的时候 遇到了一个很奇怪的问题 在此记录一下 现象描述 一个 Spark Application Driver端的内存为 5GB 一直
  • 考虑极端天气线路脆弱性的配电网分布式电源配置优化模型【IEEE33节点】(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现

随机推荐

  • 有没有免费好用的进销存管理系统?

    有没有免费好用的进销存管理系统 要 好用 还要 免费 这样的进销存系统选型策略 到最后是 一箭双雕 还是 鱼与熊掌不可兼得 呢 让我们从好用和免费开始 慢慢分析 免费和好用能共存吗 怎么才算是好用的进销存系统 推荐一款好用的 订阅制付费的系
  • 第六章--- 实现微服务:匹配系统(下)

    0 写在前面 这一章终于完了 但是收尾工作真的好难呀QAQ 可能是我初学的缘故 有些JAVA方面的特性不是很清楚 只能依葫芦画瓢地模仿着用 特别是JAVA的注解 感觉好多但又不是很懂其中的原理 只知道要在某个时候用某个注解 我真是有够菜的
  • React中渲染html结构---dangerouslySetInnerHTML

    dangerouslySetInnerHTML 胡子 语法绑定的内容全部作为普通文本渲染 渲染html结构基于 dangerouslySetInnerHTML dangerouslySetInnerHTML 是 React 标签的一个属性
  • 漏洞复现-某友CRM系统某接口存在任意文件读取(附漏洞检测脚本)

    免责声明 文章中涉及的漏洞均已修复 敏感信息 均已做打码处理 文章仅做 经验分享 用途 切勿当真 未授权的攻击属于非法行为 文章中 敏感信息 均已做多层打马处理 传播 利用本文章所提供的信息而造成的任何直接或者间接的后果及损失 均由使用者本
  • 为啥都说信息安全缺人,但招聘时招安全的却不多?

    为什么会形成这样一个扭曲的状况 因为我们现在说 信息安全缺人 一般是指 缺口 很大 而不是指 需求 很大 比如某小型 云服务 供应商 一共也就大概几百台物理机器 每隔四五个月才喊人来手动升级一下系统 打打补丁 要是补丁打得不及时导致用户被黑
  • Python 如何在测试中使用 Mock

    Mock概念 mock 的意思是模拟 也就是模拟接口返回的信息 用已有的信息替换它需要返回的信息 从实现对所依赖的模块的测试 一般有两种场景 前端对后端接口的 mock 后端服务之间的测试中涉及的mock 常常发生在单元测试的时候 前端mo
  • 漏侧是能力问题?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 9k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 聊聊Compose框架在UI测试自动化中的优点及示例

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 9k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Python的元编程之动态类创建和修改

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 9k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 企业电子招投标采购系统源码之鸿鹄电子招投标系统+电子招投标的组成

    招投标管理系统是一款适用于招标代理 政府采购 企业采购和工程交易等领域的企业级应用平台 该平台以项目为主线 从项目立项到项目归档 实现了全流程的高效沟通和协作 通过该平台 用户可以实时共享项目数据信息 实现规范化管理和有效监控 协同工作网络
  • 【实战详解】如何快速搭建接口自动化测试框架?Python + Requests

    摘要 本文主要介绍如何使用Python语言和Requests库进行接口自动化测试 并提供详细的代码示例和操作步骤 希望能对读者有所启发和帮助 前言 随着移动互联网的快速发展 越来越多的应用程序采用Web API 也称为RESTful API
  • 车载测试ADAS-常用场景仿真软件

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 9k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Web自动化测试流程:从入门到精通,帮你成为测试专家

    摘要 Web应用程序在今天的软件开发中占据着越来越重要的地位 保证Web应用程序的质量和稳定性是非常必要的 而自动化测试是一种有效的方法 本文将介绍Web自动化测试流程 并提供代码示例 步骤一 选取测试工具 选择适合自己团队的自动化测试工具
  • 计算智能 | 蚁群算法——旅行商问题(TSP)python

    目录 一 求解TSP city31 问题的python代码 二 python运行结果 一 求解TSP city31 问题的python代码 import numpy as np import random import matplotlib
  • ArrayList 扩容机制

    2023 12 18 ArrayList的构造函数 ArrayList 默认创建长度为0的数组 ArrayList int initialCapacity 创建指定容量的数组 ArrayList Collection
  • 企业电子招标采购系统源码Spring Cloud + Spring Boot + 前后端分离 + 二次开发

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化
  • 求你了!别再问我怎么学 Python 了

    很多小伙伴问如何学习 Python 哪里可以找到实战的 Python 项目 有没有爬虫案例等等 今天给大家分享一份我整理的 Python 项目大全学习资料 文末有获取方式 话不多说 直接上干货 首先 全部资料目录压缩 由于内容较多 这里也仅
  • 去除微信小程序里button的边框

    去除微信小程序里面的button边框 方法一 通过button after button after border none 方法二 给button按钮加上plain属性 属性值为true
  • 【光伏预测】基于遗传优化注意力机制的长短时记忆神经网络GA-attention-LSTM实现数据回归预测附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 代码获取 论文复现及科研仿真合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab完整代码及仿真定制内容点击 智能优化算法 神经网络预测 雷达通信
  • 一文弄懂事件Event与Kafka的区别

    事件 Event 和 Apache Kafka 是两个概念层面上有所不同的东西 它们在应用程序中的作用和使用场景也有很大的差异 1 概念和定义 事件 Event 事件是 系统内发生 的特定事情或状态变化的表示 在编程和软件设计中 事件通常被