随笔分类 - 【023】消息队列
RabbitMQ、Kafka、CAP/BASE
摘要:
最近有一个ASP.NET Core使用认证机制访问Kafka的需求,加之我们又使用了CAP这个开源项目使用的Kafka,于是网上寻找了一番发现对应资料太少,于是调查了一番,做了如下的笔记,希望对你有用。
阅读全文

摘要:
本文介绍了事务补偿与幂等性的基本概念,并基于CAP组件给了一个事务补偿和幂等性保障的DEMO示例,在实际使用中可能还会借助CAP提供的事务能力将数据持久化和发布消息作为一个事务实现原子性,即CAP与本地事务的集成。
阅读全文

摘要:
在学习Kafka的途中,我总结了一个系列的Kafka学习征途系列教程,它只选取了我认为最实用的部分整理出来,以及结合我最熟悉的.NET技术栈进行了演示。而一些我觉得在实际中用处不大的部分我没有整理,比如:重平衡机制等,这些可能对于面试会有用,不过我不是抱着面试八股文的目的来总结这个系列的,所以大家可以自行搜索学习。
阅读全文

摘要:
本文总结了Kafka KRaft模式的基本概念和优点,介绍了Kafka KRaft模式的部署过程。基于KRaft模式,我们不再需要依赖Zookeeper进行元数据管理和共识服务,在技术选型时不再需要引入额外的组件,对于Kafka来说,实在是个好消息。
阅读全文

摘要:
Offset,消息位移,它表示分区中每条消息的位置信息,是一个单调递增且不变的值。换句话说,offset可以用来唯一的标识分区中每一条记录。本文总结了offset的基础概念、存储位置、消费方式,扩展了两个常见问题:漏消费与重复消费,引出了一个消费数据积压问题,希望能对你有所帮助!
阅读全文

摘要:
Kafka默认提供了多个命令行脚本,用于实现各种各样的功能和运维管理。从2.2版本开始,提供了多达30+个Shell脚本。本文总结了Kafka提供的两组最常用也最实用的工具Shell脚本,分别cover了测试生产和消费,以及 压测生产和消费 的两个场景,希望对你有所帮助。
阅读全文

摘要:
流处理给人的印象是低延时,但是结果可能不太精确。而批处理则相反,它能提供精确的结果,但是往往存在高时延。本文总结了Kafka Streams的基本概念与执行流程,并结合Kafka Streams .NET客户端给出了一个Kafka Streams应用程序的示例。
阅读全文

摘要:
通常来说,任何系统调优的目标都是为了满足系统常见的非功能性需求,而性能则是众多非功能性需求中最重要的一个。不同的系统对性能的侧重点不同,DB的话性能是响应时间,而对于Kafka等MQ来说,则意味着吞吐量和延时。本文总结了Kafka调优的目的和方法论,并直接给出了调优Kafka的关键参数配置,可以直接用于生产环境。
阅读全文

摘要:
在实际环境中,用户似乎总是愿意用较小的延时增加的代价,去换取 TPS 的显著提升。毕竟,从 2ms 到 10ms 的延时增加通常是可以忍受的。本文介绍了提高producer吞吐量 与 提高消息可靠性 的实践,重点介绍了在Confluent.Kafka组件下如何进行配置的代码实践,相信会对你有所帮助。
阅读全文

摘要:
集群部署“兵马未动,粮草先行”,与其盲目上马一套Kafka环境然后事后费力调整,不如一开始就思考好实际场景下业务所需的集群环境。本文从Kafka集群众多的参数配置项选取了一些特别特别重要的参数配置做了介绍,相信了解这些参数配置之后,对于我们后续优化Kafka集群配置会大有裨益。
阅读全文

摘要:
作为一个.NET Developer,自然想要在.NET项目中集成Kafka实现发布订阅功能。本文总结了.NET Core如何通过对应客户端操作Kafka,基于Confluent.Kafka项目和CAP项目可以方便的实现发布订阅的效果。
阅读全文

摘要:
本文总结了Kafka的测试环境搭建过程,本文选择的是基于Docker来搭建非宿主机直接搭建,加之官方并没有推出官方的Docker镜像,因此建议生产环境还是不要通过Docker来搭建,开发/测试环境是可以的,快速且高效。
阅读全文

摘要:
本篇会聚焦于Kafka的基础概念部分,带你理解Kafka的基本术语。如果本文只能汇总成一句话,那应该是:Apache Kafka 是消息引擎系统,也是一个分布式流处理平台。
阅读全文

摘要:
本篇首先简单介绍了一下CAP这个开源项目,然后基于上一篇中的下订单的小案例来进行了基于CAP的改造,并通过一个实例的运行来看到了结果。当然,这个实例并不完美,很多点都没有考虑(比如消息端消费时的幂等性)和失败重试的场景实践等等等等。由于时间和精力的关系,目前只使用到这儿,以后有机会能够应用上会研究下CAP的源码,最后感谢杨晓东为.NET社区带来了一个优秀的开源项目!
阅读全文

摘要:
本篇主要基于一个小案例(订单业务处理场景),首先介绍了其业务场景与基本业务流程,然后通过介绍相关的每个服务的代码实现,最后通过一个快速的测试演示了数据如何达到最终一致性。当然,这个小案例并不完整,没有对重试的补偿机制以及失败后的回滚机制进行演示和测试,不过有兴趣的朋友可以自行改代码实现。最后,再次强调实现数据的最终一致性有很多方案,这里只是举一种我从桂素伟老师那里所学到的比较简单易于学习的实现方式而已。对MassTransit感兴趣想应用于生产环境的朋友,可以去了解了解saga。
阅读全文

摘要:
本篇极简的介绍了一下数据一致性和MassTransit这个开源的组件,通过几个例子介绍了在.NET环境下如何使用MassTransit操作RabbitMQ实现消息的接收/发送以及发布/订阅。后续我会继续使用MassTransit结合Quartz.Net在ASP.NET Core环境下实现一个简单的基于补偿机制的数据最终一致性的小案例,希望到时也可以和各位园友分享。
阅读全文

摘要:
本篇超级简单地介绍了一下消息队列与RabbitMQ,通过使用EasyNetQ这个基于RabbitMQ.Client的客户端做了一个QuickStart演示了在.NET Core环境下如何进行消息的发布与订阅,并通过一个微服务的小案例演示了如何在ASP.NET Core环境下如何基于EasyNetQ完成消息的发布与订阅,一个类似于简单的事件总线模式成型。当然,本篇的内容都十分基础,如果要应用好RabbitMQ,还得把那些基础概念(如:Channel,Exchange等)弄清楚,然后去理解一下事件总线的概念,实际中还得考虑数据一致性等等,路途漫漫,继续加油吧!
阅读全文
