网站文章更新,网站聚合搜索怎么做,东莞市建设信息网,wordpress获取分类的文章列表Kafka 是一个开源的#xff0c;分布式的#xff0c;可扩展的#xff0c;高性能的发布订阅模式的消息中间件#xff0c;如果你要构建一个处理海量数据的系统#xff0c;那么 Kafka 将会是一个非常好的选择#xff0c;这篇文章我们将会讨论如何基于 Kakfa 构建一个发布订阅… Kafka 是一个开源的分布式的可扩展的高性能的发布订阅模式的消息中间件如果你要构建一个处理海量数据的系统那么 Kafka 将会是一个非常好的选择这篇文章我们将会讨论如何基于 Kakfa 构建一个发布订阅模式的程序。Kafka 架构 这一节中先来看看 Kafka 的基础架构以及相关术语大体来说 Kafka 由下面几个组件组成。Kafka Cluster 一个或者多个服务器组成的集群Producer 一个用于发布消息的组件。Consumer 一个用于获取并处理消息的组件。ZooKeeper 一个中心化的协调组件常用于保存分布式环境下各个节点的配置信息。在 Kafka 中数据的基本单元是 message它是一个 key-value 键值对kafka 会将所有的 message 转换为 byte[]值得注意的是生产者 和 消费者 以及 cluster 集群之间都是采用 tcp 协议通讯的kafka 集群中的每一台机器都被称为代理(broker)你可以非常容易的向集群添加机器实现容量的横向扩展。下面的图展示了 kafka 的基础架构。kafka 中的 topic 表示 message 的逻辑集合如果不明白的话你可以认为 topic 就是 category (分类)category 下自然就是归类的 message这些 message 是由 生产者 产生。kafka server 中会包含一个或者多个 topics每一个 topics 又可以包含一个或者多个 partitions(分区)partition 被定义为一个有序的消息序列值得注意的是 partitions 是 kafka 能够动态扩展的关键换句话说 partition 可以分布在多个 kafka server 上,具体操作流程为kafka 中的 生产者 将 message 推送到指定的 topic订阅该 topic 的 消费者 就可以拿到该消息。Kafka 和 RabbitMQ 比较 Kafka 和 RabbitMQ 都是非常流行的开源的 消息中间件那什么时候应该选择 Kakfa 而不是 RabbitMQ 呢主要考虑如下几点。RabbitMQ 是由高性能语言 Erlang 编写的它拥有丰富的 路由机制 和强大的 消息确认机制 同时 RabbitMQ 还提供了一个可视化的 WebUI 界面可以通过它监视 RabbitMQ 的运行状态但如果你有大规模部署的需求RabbitMQ 就没有 Kafka 好使了因为后者的扩容只需要增加 partitions 就可以了。RabbitMQ Cluster 会存在经典的 脑裂问题需要使用单独的插件支持federations。Kafka 在性能上远超 RabbitMQ单节点的 Kafka 能够处理 10w/s 条记录而 RabbitMQ 大概只能处理 2w/s 条记录。构建 生产者 和 消费者 这一节我们来讨论如何为 Kafka 构建生产者和消费者这就需要构建两个 Console 程序分别充当各自角色大家可以用 nuget 安装一下 kafka-net命令如下
Install-Package kafka-net构建 生产者 Consolestatic void Main(string[] args){string payload Welcome to Kafka!;string topic IDGTestTopic;Message msg new Message(payload);Uri uri new Uri(http://localhost:9092);var options new KafkaOptions(uri);var router new BrokerRouter(options);var client new Producer(router);client.SendMessageAsync(topic, new ListMessage { msg }).Wait();Console.ReadLine();}构建 消费者 Console static void Main(string[] args){string topic IDGTestTopic;Uri uri new Uri(http://localhost:9092);var options new KafkaOptions(uri);var router new BrokerRouter(options);var consumer new Consumer(new ConsumerOptions(topic, router));foreach (var message in consumer.Consume()){Console.WriteLine(Encoding.UTF8.GetString(message.Value));}Console.ReadLine();}
最后可以依次将 生产者 和 消费者 程序启动起来然后你就会看到 消费者 Console 上显示Welcome to Kafka! 。其实在开源世界中有太多的消息中间件比如RabbitMQ, MSMQ, IBM MQ Series 等等现在的 Kafka 不仅仅是 消息中间件 了而是用于大数据的 流式处理平台Kafka 也常常用于 IOT 程序日志聚合 和 其他低延迟强消息保证 等场景如果你的应用程序需要一个快速并可扩展的消息中间件kafka 将会是一个非常好的选择后续我会分享更多的关于 kafka 的文章。译文链接https://www.infoworld.com/article/3215165/how-to-use-apache-kafka-messaging-in-net.html