【Java Web】Kafka,构建TB级异步消息系统

1. 阻塞队列

  • BlockingQueue
    • 解决线程通信的问题;
    • 阻塞方法:put从队列中存一个 , take 从队列中拿出一个
  • 生产者消费者模式
    • 生产者:产生数据的线程;
    • 消费者:使用数据的线程。
  • 实现类
    • ArrayBlockingQueue
    • LinkedBlockingQueue
    • ProrityBlockingQueueSynchronousQueueDelayQueue
  • 阻塞队列充当了生产者(Thread-1)和消费者(Thread-2)之间的桥梁;
  • 若Blocking Queue满了,将阻塞生产者,线程1陷入等待;
  • 若Blocking Queue空了,将阻塞消费者,线程2陷入等待;
  • 因此,可以防止系统资源被浪费。

2. Kafka入门

  • Kafka简介
    • kafka 是一个分布式的流媒体平台;
    • 应用:消息系统、日志收集、用户行为追踪、流式处理。
  • Kafka特点
    • 高吞吐量、消息持久化、高可靠性、高扩展性
  • Kafka术语
    • Broker(一个服务器)、Zookeeper(集群)
    • Topic(文件夹)、Partition(分区,提高容错率)、Offset(在分区中的位置)
    • Leader Replica(主副本,如果需要从分区获取数据,主副本可以响应)、Follower Replica(随从副本,备份)

-卡夫卡能处理海量数据(高吞吐量 ),因为卡夫卡将数据存在硬盘此类的介质里,而硬盘比内存的价格低廉,所以它可以持久化 。卡夫卡的分布式保证了高可靠性 。如果想要加入新服务器,只需简单的配置,因此具有高扩展性

【1】Mac 启动Zookeeper:

java 复制代码
./zookeeper-server-start.sh ../config/zookeeper.properties &

【2】启动Kafka:

java 复制代码
./kafka-server-start.sh ../config/server.properties &

【3】创建Topic

java 复制代码
./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic javaTopic --partitions 2 --replication-factor 1

replication-factor:指定副本数量

partitions:指定分区

【4】查看Topic

java 复制代码
./kafka-topics.sh --bootstrap-server localhost:9092 --list

【5】删除Topic

java 复制代码
./kafka-topics.sh --bootstrap-server localhost:9092 --delete -topic javaTopic

【6】生产消费数据

【6-1】生产者

java 复制代码
./kafka-console-producer.sh --broker-list localhost:9092 --topic javaTopic

【6-2】消费者

java 复制代码
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic javaTopic --from-beginning
相关推荐
万少2 小时前
用腻了 WorkBuddy 的默认界面?这个开源小工具给它换上了毛玻璃
前端·javascript·后端
阿维的博客日记6 小时前
MultipartFile 是不是表示仅仅是一个分片?
java·后端·spring·multipartfile
海上彼尚6 小时前
Nodejs也能写Agent - 16.LangGraph篇 - 条件分支与循环
前端·后端·langchain·node.js
程序员无隅6 小时前
Coding Agent 为什么压缩上下文后还能继续工作?上下文模块设计拆解
java·开发语言·数据库
Python+996 小时前
Java 枚举类(Enum)详解:从基础到高级应用
java·开发语言·python
二炮手亮子7 小时前
浅记java线程池
java·开发语言
一路向北North7 小时前
Spring Security OAuth2.0(23):分布式系统授权-转发明文给微服务
java·spring·微服务
To_OC7 小时前
从 “卡死半天” 到 “打字机效果”:大模型流式输出前端实现全记录
前端·javascript·llm
SoaringHeart8 小时前
Flutter最佳实践:键盘辅助视图输入框天添加图片附件
前端·flutter
kyriewen8 小时前
我看完这篇安全论文——AI推荐的npm包,92%是编出来的
前端·javascript·ai编程