如何在 .NET 中使用 Kafka

如何在 .NET 中使用 Kafka

作者:码农读书 2021-03-09 07:27:40

开发

架构

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

[[386220]]

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

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,命令如下:

  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<Message> { 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

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/227177.html<

(0)
管理的头像管理
上一篇2025-04-17 17:17
下一篇 2025-04-17 17:19

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注