在第一节我们讲MSK的扩容时增加了broker节点的数量,但是目前MSK尚不支持减少broker的数量。假设业务迎来了流量高峰,我们增加了多个broker,但流量高峰过后却不缩回来节点数量(当然可以通过mirrormaker来迁移到小的集群,或者垂直缩小到小机型)就很蛋疼。所以引出了本节的MSK Serverless
很多业务场景的流量都是会波动的, 例如电商或银行业务,在每天某个时间段访问人数最多,半夜几乎没有访问量:
另外有些业务流量完全是不可预估的:
针对这些场景,需要调节kafka集群能力,让它能够迎接最大流量高峰,但不可避免的,在流量低峰时会有计算资源的浪费。
MSK Serverless就是可以让运维不再担心集群配置问题,自动适配流量的高峰与低峰,它的计费模式如下:
值得注意的是,MSK Serverless
的磁盘也是按需收费,这块也能带来成本的节省。
比如我们的日志只需要保留一天,假如在1天需要1TB的磁盘,后面29天流量减少了十倍,此时我们需要100GB的磁盘足矣,那么后面29天我们都浪费了90%的磁盘空间。
如果使用MSK Serverless
,则平均下来,每天使用了(100 * 29 + 1000)/30 = 130GB
, 相比于上面的场景,带来巨大的成本节约。
MSK Serverless
适用于流量峰值差异大的负载,带来成本的节约,并且可以降低运维成本(如partition的平衡)。什么场景该使用MSK呢,经验来说一般峰值流量大于正常业务流量10-15倍以上时,可以考虑使用MSK Serverless
。使用MSK Serverless
和普通MSK的成本差异,是完全可以预估出来的在msk控制台创建新的MSK集群,选择Custom create
,并为集群命名:
集群类型选择Serverless
,并进入下一步:
选择集群部署的VPC和子网:
为集群配置安全组(安全组要放开连接客户端的9098端口),进入下一步:
目前MSK Serverless只支持IAM认证。点击进入下一步:
MSK Serveless自动帮我们配置好了Consumer Topic和Consumer Group级别的监控:
进入下一步,点击创建。通常5min左右创建完成。
创建集群完成后,首先获取它的连接方式:
将bootstrap server的URL复制下来:
登录到cloud9(由于cloud 9是Administrator权限,所以不需要再单独绑定role到上面。如果想细粒度控制权限,参考: https://docs.aws.amazon.com/msk/latest/developerguide/create-iam-role.html )
IAM认证的过程,需要下载JAR文件来实现:
cd /home/ec2-user/environment/
wget https://github.com/aws/aws-msk-iam-auth/releases/download/v1.1.3/aws-msk-iam-auth-1.1.3-all.jar
在同一目录下创建 client.properties
文件,内容如下:
security.protocol=SASL_SSL
sasl.mechanism=AWS_MSK_IAM
sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandle
在运行Kafka CLI前,需要导出CLASSPATH
以包含MSK IAM库,也可以将这个jar文件复制到kafka的libs
目录:
export CLASSPATH=/home/ec2-user/environment/aws-msk-iam-auth-1.1.3-all.jar
创建topic:
kongpingfan:~/environment $ kafka-topics --bootstrap-server boot-icwmx79a.c3.kafka-serverless.ap-southeast-1.amazonaws.com:9098 --create --replication-factor 3 --partitions 3 --topic my-serverless-topic --command-config client.properties
Created topic my-serverless-topic.
列出创建的topic:
kongpingfan:~/environment $ kafka-topics --bootstrap-server boot-icwmx79a.c3.kafka-serverless.ap-southeast-1.amazonaws.com:9098 --list --command-config client.properties
my-serverless-topic
当然使用producer发送数据,以及consumer接收数据肯定也是没问题的,这里就不再演示。