您现在的位置是:亿华云 > IT科技
如何在 .NET 中使用 Kafka
亿华云2025-10-04 03:11:32【IT科技】5人已围观
简介本文转载自微信公众号「码农读书」,作者 码农读书。转载本文请联系码农读书公众号。Kafka 是一个开源的,分布式的,可扩展的,高性能的发布订阅模式的消息中间件,如果你要构建一个处理海量数据的系统,那么
本文转载自微信公众号「码农读书」,中使作者 码农读书。中使转载本文请联系码农读书公众号。中使
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构建 生产者 Console
static 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 List<Message> { 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
很赞哦!(245)
相关文章
- 因为域名解析需要同步到DNS根服务器,而DNS根服务器会不定时刷,只有DNS根服务器刷新后域名才能正常访问,新增解析一般会在10分钟左右生效,最长不会超过24小时,修改解析时间会稍微延长。
- 四、一定要仔细阅读细节
- 第五步:重复第四步,直到找到正确的纪录。
- 四、配置网站,填充内容
- 因为域名解析需要同步到DNS根服务器,而DNS根服务器会不定时刷,只有DNS根服务器刷新后域名才能正常访问,新增解析一般会在10分钟左右生效,最长不会超过24小时,修改解析时间会稍微延长。
- 以上的就是为大家介绍的关于域名的详解域名注册:域名注册0
- 第五步:重复第四步,直到找到正确的纪录。
- 评估域名涉及的行业规模与发展状况成正比。
- 公司和个人选域名方法一样吗?有什么不同?
- 尽量不要在域名中出现特殊字符,这样的域名很容易导致访问者输入错误,同时给人留下不专业的印象,降低网站的可信度,并流失大量潜在客户。
热门文章
站长推荐
4、注册门槛低
为了避免将来给我们的个人站长带来的麻烦,在选择域名后缀时,我们的站长最好省略不稳定的后缀域名,比如n,因为我们不知道策略什么时候会改变,更不用说我们将来是否还能控制这个域名了。因此,如果站长不是企业,或者有选择的话,如果不能选择域名的cn类,最好不要选择它。
只要我们做的是从目前的市场情况选择域名,从简单易记,从个性特征上,我们就可以找到一个好域名进行注册。域名注册进行域名记录和解析以及绑定网站后,客户可以通过URL登录您的网站。
6、提示添加成功,点击确认进行最后的确定操作。一般10分钟就解析生效,可以用域名进行访问了。
尽量不要在域名中出现特殊字符,这样的域名很容易导致访问者输入错误,同时给人留下不专业的印象,降低网站的可信度,并流失大量潜在客户。
注册域名要了解几大点?新手有什么方式注册域名?
CNAME:对应解析的记录值为域名地址
4、参加域名拍卖会