本站的所有文章都默认为英文,中文版本由Google Translate 翻译。
由于时间限制,并非所有文章都有中文版本。
Kafka介绍
Apache Kafka 现在在我的工作中大量使用。 因此,我认为写一篇关于它的帖子会很有用和有帮助。
Kafka 是一个事件流平台。 Apache Kafka 定义事件流如下:
从技术上讲,事件流是以事件流的形式从数据库、传感器、移动设备、云服务和软件应用程序等事件源实时捕获数据的实践; 持久存储这些事件流以供以后检索; 实时和回顾性地操纵、处理和响应事件流; 并根据需要将事件流路由到不同的目标 技术。 因此,事件流可确保数据的连续流动和解释,从而使正确的信息在正确的时间出现在正确的位置。
Kafka安装和Hello World
关于如何在其他系统上安装和运行Kafka,请参考官方文档: https://kafka.apache.org/quickstart
我正在使用 Mac。 Homebrew 是一个非常好的工具,可以在 Mac 上安装和管理包,与 Ubuntu 上的 apt-get 非常相似。 MacOS 上的 Appstore 对于普通用户来说安装、升级、更新应用已经足够了,但是对于开发者来说绝对不够用。 老实说,我认为 Apple 应该收购 Homebrew 并将其集成到 MacOS 中。
安装Java
|
|
安装Kafka
|
|
启动ZooKeeper
打开一个新的终端,运行命令启动 ZooKeeper,因为 Kafka 利用 ZooKeeper 来管理集群。
|
|
启动Kafka
注意: 编辑/usr/local/etc/kafka/server.properties,将listeners改为listeners=PLAINTEXT://localhost:9092
打开一个新终端,运行命令启动Kafka:
|
|
创建 Kafka Topic
创建一个 replication-factor=1(没有额外的副本)和 partition=1(只有 1 个分区)的测试主题
|
|
初始化2个Kafka生产者
打开其他 2 个终端并运行命令以启动 Kafka 生产者:
|
|
按以下顺序写 4 条消息:
- producer1 –> message 1
- producer2 –> message 1
- producer1 –> message 2
- producer2 –> message 2
(base) xxxx@MacBook-Air-2 ~ % kafka-console-producer –broker-list localhost:9092 –topic test producer1 message 1
producer1 message 2
(base) xxxx@MacBook-Air-2 ~ % kafka-console-producer –broker-list localhost:9092 –topic test producer2 message1
producer2 message2
启动 Kafka 消费者
打开终端并运行命令来初始化 kafka 消费者:
|
|
而我们将之前写的4条消息:
(base) xxxx@MacBook-Air-2 ~ % kafka-console-consumer –bootstrap-server localhost:9092 –topic test –from-beginning
producer1 message 1
producer2 message1
producer1 message 2
producer2 message2
Kafka 使用 Pub-Sub 模式。 我们可以为主题创建多个生产者和消费者来学习它。
Kafka 和 RabbitMQ 的比较
按照设计,Kafka 是一个事件流平台,而 RabbitMQ 是一个消息队列。
以下是 Apache Kafka 和 RabbitMQ 之间的一些主要区别:
Kafka | RabbitMQ | |
---|---|---|
消息排序 | 由于其分区,提供消息排序。 消息通过消息键发送到主题。 | N/A |
消息保留 | 基于策略(例如,30 天) Kafka 是一个日志,这意味着它默认保留消息。 您可以通过指定保留策略来管理它。 | 基于确认RabbitMQ 是一个队列,因此消息一旦被消费就会被删除,并提供确认。 |
消息优先级 | N/A | 在RabbitMQ中,可以指定消息的优先级,优先消费高优先级的消息。 |
消息路由 | Publish/Subscribe based | Multiple exchange types: Direct, Fan out, Topic, Header-based |
关于性能,这两个系统都可以扩展到每秒处理数百万条消息。 一些基准测试结果表明:
- 同样的资源配置,Kafka 比 RabbitMQ 有更高的吞吐量;
- RabbitMQ 提供比 Kafka 更低的消息延迟
结论
Apache Kafka 和 RabbitMQ 都是很棒的系统。 当需要对消息进行复杂的路由和优先级排序时,RabbitMQ 是首选; 当需要消息排序和保留时,Kafka 是不二之选。 在业务案例方面,RabbitMQ 更多用于事务系统,非常适合在微服务集群之间路由消息,而 Kafka 更多用于数据流和管道等分析系统。