kafka-概述
概述
kafka 是什么 ?
Apache Kafka® is a distributed streaming platform
是一个分布式的流(stream) 框架
那么它意味着什么呢?一个流框架有三个重要能力 :
- 发布-订阅流记录,就像消息队列
- 用 fault-tolerant (错误容忍,翻译不一定正确,可以查一下 fault-tolerant 到底指的是什么意思)的方式存储流记录
- 处理消息当流到达的时候(有点像事件驱动)
kafka 中几个重要的概念 :
- Kafka is run as a cluster on one or more servers that can span multiple datacenters.(也就是分布式)
- The Kafka cluster stores streams of records in categories called topics.(节点储存流记录的目录称为 topics )
- Each record consists of a key, a value, and a timestamp (流记录包括 key,value,timestamp)
kafka 中核心的 API 有 :
- Producer API
- Consumer API
- Streams API
- Connector API
- Admin API
总体架构图 :
总体来看 ,kafka 这个中间件只需要和 broker 节点进行联系. 深入到细节一点 , 那就是信息被分到某个节点 ,然后一个消息由多个分片组成, 多个分片组成像 SQL 读写分离一样的复制备份架构 ,防止数据丢失 (真TM人才 ,佩服 kafka 的设计)
特性-保证
- Message 消息先发送的先被记录在在 log 中,不会因为其他因素影响 order
- 消费者看到记录是按顺序排列在log 中的
- 一个 topic 拥有 N 个副本,我们可以容忍 N-1 个机器失败 。
应用场景
- kafka as message queue
- Kafka as a Storage System
- Kafka for Stream Processing
- Putting the Pieces Together
kafka 大体用在两方面的应用场景 :
- 构建实时的在系统或应用之间可靠流通的流数据管道(例如消息队列)
- 构建实时处理,转化流数据的流应用(例如配合其他系统做大数据处理)
安装并运行
安装 zk
安装 zk 之前肯定要有 java 环境,这个不用多说(zk 是 java应用),安装好后为了让外界的zk图形化界面工具看到 znode 的信息,开放 2181 端口 。
firewall-cmd --zone=public --add-port=2181/tcp --permanent
重新加载配置!!
firewall-cmd --reload
启动 kafka
这个就简单了,安装官方的启动方式即可。
> bin/kafka-server-start.sh config/server.properties
简单的 shell 文本
每次都要启动两个东西,于是我写了简单的shell 文本
## 先启动 zk
cd /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/
./zkServer.sh start
## 再启动kafka
cd /usr/local/kafka/kafka_2.12-2.5.0/bin/
./kafka-server-start.sh ../config/server.properties
参考资料
- https://kafka.apache.org/intro.html (入门必看,这份官方文档必看的呀)
- http://www.jasongj.com/2015/03/10/KafkaColumn1/ (必看,看完入门看这个)
进一步了解 : - https://www.zhihu.com/question/28925721
- http://lday.me/2017/06/27/0008_kafka_vs_tranditional_mq/ (kafka作为MQ 与其他MQ 对比)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术