文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在 .NET 中使用 Kafka

2024-12-03 10:15

关注

本文转载自微信公众号「码农读书」,作者 码农读书。转载本文请联系码农读书公众号。

Kafka 是一个开源的,分布式的,可扩展的,高性能的发布订阅模式的消息中间件,如果你要构建一个处理海量数据的系统,那么 Kafka 将会是一个非常好的选择,这篇文章我们将会讨论如何基于 Kakfa 构建一个发布订阅模式的程序。

Kafka 架构

这一节中,先来看看 Kafka 的基础架构以及相关术语,大体来说 Kafka 由下面几个组件组成。

在 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 呢?主要考虑如下几点。

构建 生产者 和 消费者

这一节我们来讨论如何为 Kafka 构建生产者和消费者,这就需要构建两个 Console 程序分别充当各自角色,大家可以用 nuget 安装一下 kafka-net,命令如下:

  1. Install-Package kafka-net 

构建 生产者 Console

  1. static void Main(string[] args) 
  2.         { 
  3.             string payload ="Welcome to Kafka!"
  4.             string topic ="IDGTestTopic"
  5.             Message msg = new Message(payload); 
  6.             Uri uri = new Uri("http://localhost:9092"); 
  7.             var options = new KafkaOptions(uri); 
  8.             var router = new BrokerRouter(options); 
  9.             var client = new Producer(router); 
  10.             client.SendMessageAsync(topic, new List { msg }).Wait(); 
  11.             Console.ReadLine(); 
  12.         } 

构建 消费者 Console

  1. static void Main(string[] args) 
  2.         { 
  3.             string topic ="IDGTestTopic"
  4.             Uri uri = new Uri("http://localhost:9092"); 
  5.             var options = new KafkaOptions(uri); 
  6.             var router = new BrokerRouter(options); 
  7.             var consumer = new Consumer(new ConsumerOptions(topic, router)); 
  8.             foreach (var message in consumer.Consume()) 
  9.             { 
  10.                 Console.WriteLine(Encoding.UTF8.GetString(message.Value)); 
  11.             } 
  12.             Console.ReadLine(); 
  13.         } 

最后可以依次将 生产者 和 消费者 程序启动起来,然后你就会看到 消费者 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

 

来源:码农读书内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯