当前位置: 首页 > news >正文

简单易懂的Kafka例子

当然!为你设计一个简单易懂的Kafka例子是学习它的最佳方式。我会用一个“订单处理系统”的类比来解释,并提供一个从零开始的实践指南。

第一步:先理解核心概念(用快递站类比)

想象一下Kafka就像一个高效的物流快递中心,专门处理消息(数据)。

  • Topic(主题):就像是一个特定的快递传送带。比如有一条“订单传送带”,所有订单消息都放在这条传送带上。你还可以有“物流传送带”、“短信通知传送带”等。在我们的例子中,我们会创建一个叫 quickstart-events 的传送带。
  • Producer(生产者):就是发送包裹的人。它负责创建订单消息,并把消息放到指定的传送带(Topic)上。例如:你的网站下单程序就是一个生产者。
  • Consumer(消费者):就是从传送带上取走包裹的人。它一直盯着传送带,一旦有新的包裹(消息)就立刻取走处理。例如:库存管理系统和短信推送系统都是消费者。
  • Broker:就是整个快递中心的某个工作站。一个Kafka系统由多个Broker组成,以保证高可用和高性能。但对于初学者,我们先从一个Broker开始。

核心思想: Producer和Consumer是解耦的。Producer只管发,它不关心谁来处理;Consumer只管取,它不关心是谁发的。它们之间只通过Kafka这个“快递中心”交流。


第二步:动手实践 - 一个简单的消息发送和接收

我们将使用Kafka自带的命令行工具(CLI)来最直观地体验这个过程。这就像在快递中心亲手操作一下发送和接收包裹。

环境准备
  1. 安装Java:Kafka是基于Java的,所以首先确保你的电脑安装了JDK 8或以上版本。在终端输入 java -version 检查。
  2. 下载Kafka:访问 Apache Kafka官网下载页面,下载最新的二进制版本(比如:kafka_2.13-3.7.0.tgz)。解压到一个你熟悉的目录。
开始实践

1. 启动Kafka环境(启动快递中心)

  • 打开终端,进入你解压Kafka的目录

  • Step 1:启动ZooKeeper (Kafka用它来管理集群状态)

    # 在Windows上使用
    .\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties# 在Linux/macOS上使用
    bin/zookeeper-server-start.sh config/zookeeper.properties
    

    保持这个终端窗口运行,新开一个终端窗口进行下一步。

  • Step 2:启动Kafka Broker (启动快递工作站)

    # 在Windows上使用
    .\bin\windows\kafka-server-start.bat .\config\server.properties# 在Linux/macOS上使用
    bin/kafka-server-start.sh config/server.properties
    

    同样,保持这个终端窗口运行。现在你的“快递中心”已经运转起来了!

2. 创建一个Topic(创建一条传送带)

  • 打开第三个终端窗口,进入Kafka目录。
  • 创建一个名为 quickstart-events 的Topic:
    # 在Windows上使用
    .\bin\windows\kafka-topics.bat --create --topic quickstart-events --bootstrap-server localhost:9092# 在Linux/macOS上使用
    bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
    

3. 启动一个Consumer(安排一个接包裹的工人)

  • 刚才创建Topic的终端窗口里,运行以下命令来启动一个消费者。这个命令会让消费者开始监听quickstart-events传送带,但现在它还看不到任何消息。
    # 在Windows上使用
    .\bin\windows\kafka-console-consumer.bat --topic quickstart-events --from-beginning --bootstrap-server localhost:9092# 在Linux/macOS上使用
    bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
    
    这个终端窗口现在会“挂起”,像是在等待,这是正常的。它正在等待消息的到来。

4. 启动一个Producer(安排一个发包裹的工人)

  • 打开第四个终端窗口,进入Kafka目录。
  • 运行生产者客户端命令:
    # 在Windows上使用
    .\bin\windows\kafka-console-producer.bat --topic quickstart-events --bootstrap-server localhost:9092# 在Linux/macOS上使用
    bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
    
    运行后,光标会停在一个 > 符号后面,等待你输入。

5. 体验魔法时刻!

  • 在**Producer的窗口(第四个)**中,输入几条消息,每输完一条按一次回车:
    >Hello, Kafka!
    >This is my first message.
    >Goodbye!
    
  • 现在,立刻切换到Consumer的窗口(第三个),你会看到神奇的一幕:你刚刚发送的消息已经出现在这里了!
    Hello, Kafka!
    This is my first message.
    Goodbye!
    

恭喜你! 你已经成功完成了你的第一次Kafka消息生产和消费!


总结与下一步

在这个简单的例子中,你:

  1. 启动了Kafka服务器(ZooKeeper + Broker)。
  2. 创建了一个Topic(quickstart-events)。
  3. 启动了一个消费者来监听这个Topic。
  4. 启动了一个生产者并向Topic发送了文本消息。
  5. 观察到消费者几乎实时地收到了这些消息。

这就是Kafka最核心、最简单的功能:让不同的应用程序之间可以可靠地传递消息。

给你的下一步建议:

  • 玩一下:尝试创建不同名字的Topic(传送带),用多个生产者发送消息,或者开多个消费者窗口看看会发生什么。
  • 用代码实现:尝试使用Kafka的Python(kafka-python库)或Java客户端,写几行代码来代替今天的命令行工具,实现同样的功能。这是从“会用”到“真会”的关键一步。
  • 理解消费者组:这是下一个重要概念。你可以让多个消费者组成一个“组”来共同消费一个Topic,Kafka会自动在它们之间分配消息,实现负载均衡。

希望这个例子能帮你迈出Kafka学习的第一步!


文章转载自:

http://NnCumBcB.fdmtr.cn
http://zG5w241p.fdmtr.cn
http://xR9jCluN.fdmtr.cn
http://JgVE3dGS.fdmtr.cn
http://47tmw4bO.fdmtr.cn
http://raa8Y6xT.fdmtr.cn
http://unnAU5HP.fdmtr.cn
http://pPqRchY8.fdmtr.cn
http://Lu11rrXw.fdmtr.cn
http://3W9YqOlM.fdmtr.cn
http://huA3m6u8.fdmtr.cn
http://vuMuxMS6.fdmtr.cn
http://CmtckvE6.fdmtr.cn
http://3QJszYeV.fdmtr.cn
http://lsPAXS8A.fdmtr.cn
http://FeJkTjbn.fdmtr.cn
http://5HLhEjtk.fdmtr.cn
http://X51zifEB.fdmtr.cn
http://mO0iUIug.fdmtr.cn
http://tDJFPxVZ.fdmtr.cn
http://Jb7A3GmO.fdmtr.cn
http://NdPOS4Uy.fdmtr.cn
http://PcCF4Yfm.fdmtr.cn
http://p1PNeEhO.fdmtr.cn
http://eEuu1Yez.fdmtr.cn
http://OXeABmeL.fdmtr.cn
http://iBZokbQR.fdmtr.cn
http://DiON7W12.fdmtr.cn
http://lyz9Aa8w.fdmtr.cn
http://kRstzyAM.fdmtr.cn
http://www.dtcms.com/a/387895.html

相关文章:

  • 针对tomcat [/usr/lib64:/lib64:/lib:/usr/lib]上找不到基于APR的Apache Tomcat本机库的处理方法
  • 【js】js实现日期转大写:
  • 番茄时钟小程序版本更新记录(v1.0)
  • css消除图片下的白边
  • 我是如何在electron里安装shadcn ui框架的
  • 【图像理解进阶】如何对猫猫的图片进行细粒度分类?
  • JSCPC/GDCPC 2025 J.Puzzle Competition(解谜游戏)
  • SpringMVC 系列博客(三):进阶功能与 SSM 整合实战
  • 电商网站反爬虫机制详解及应对策略
  • 没了CDN与PCDN,网络会怎样?
  • C++中std::vector Vs std::deque VS std::list对比详解
  • RecyclerView实现流式布局
  • 【连载5】C# MVC 异常处理避坑指南:异步操作与静态资源错误解决方案
  • 当控制器无法上网时,如何利用windows笔记本与控制器共享网络?
  • 企业数字化视角下的项目管理软件市场全景分析(2025版)
  • Python异步编程:asyncio.create_task() 用法解析
  • java面试Day1 | redis缓存穿透、击穿、雪崩、持久化、双写一致性、数据过期策略、数据淘汰策略、分布式锁、redis集群
  • Jenkins运维之路(容器项目的优化)
  • 【精品资料鉴赏】363页智慧旅游大数据平台项目建设设计方案
  • 软考 系统架构设计师系列知识点之杂项集萃(149)
  • MyBatis 中注解操作与 XML 映射文件操作的对比
  • 复杂 PDF 文档如何高效解析?
  • 加密网络流量分类
  • leetcode算法题记录:
  • VS安装后通过vswhere.exe查询显示的 installationVersion数字怎么不是2022?
  • 光伏电站安全 “守护神”:QB800 绝缘监测平台,为清洁能源高效运行筑固防线
  • STC携手非小号 Talking Web3,海上ALPHA WEB3派对启航
  • AR技术突破:极端环境下设备的创新与应用
  • R---------split()` 函数
  • 和为K的子数组-前缀和+哈希