消息队列 Kafka 操作指南
# 消息队列 Kafka 操作指南
消息队列Kafka是基于Apache Kafka的分布式发布订阅消息队列服务,广泛应用于日志收集、流式数据处理、在线和离线分析等场景,致力于为用户提供分布式、高吞吐、可扩展的全托管服务。
# 开源对比
开发云消息队列 Kafka版 与开源 Apache Kafka 的性能对比详情如下:
特性 | 开发云消息队列Kafka版 | Apache Kafka |
---|---|---|
优点 | 吞吐量非常大、扩展性灵活、运维成本低 | 吞吐量大 |
缺点 | 极端情况可能丢失消息 | 可能丢失消息、扩展性不够灵活、依赖组件多,运维量大、安全防护功能有限,隔离和兼容性差 |
吞吐量 | 非常大 | 较大 |
常规性能 | 百万级 QPS | 百万级 QPS |
成本 | 按照客户预估的流量峰值和磁盘容量来计费,十分灵活 | 自建 Kafka 的成本更高,需人工和运维环境 |
运维 | 完善的监控告警系统和运维工单系统,Ckafka 研发专家随时答疑解惑,迅速解决客户问题 | 自建 Kafka,运维和部署十分繁琐,出问题难以定位 |
可扩展性 | 非常灵活、易于扩展,发送消息只需指明集群访问地址,Broker 的变化对于收发消息都透明 | 不够灵活,发送消息需指明 Broker 地址,接收消息需 ZooKeeper 协调调度 |
可用性 | 可用性很高,主从自动切换,消息服务承诺可用性99.95% | 可用性高,主从自动切换,但由于异步刷盘和复制,切换后可能会丢消息 |
消息可靠性 | 可靠性较高、三副本数据备份,集群容灾性能好,故障情况极少发生 | 可靠性低、Broker 只有异步刷盘机制,主备只有异步复制,可能会导致丢失部分消息 |
安全防护 | 支持 | 不支持 |
监控告警 | 支持 | 不支持 |
服务支持 | 支持 | 不支持 |
# 创建实例
可以通过开发者控制台新建Kafka实例
提示
如果创建计费方式为按配置的资源,请确保账户余额(或代金券金额)不少于 50 元
# 1. 进入中间件首页
进入 中间件首页 (opens new window),可以看到已购买Kafka实例的概要信息,包括计费信息和过期时间等。
点击 立刻购买 按钮,进入实例创建页面。
# 2. 进行实例参数配置
在实例列表页面单击“创建”,进入“创建”页面,选择付费方式、基本信息、规格、网络、高级配置等信息。
# 选择版本和节点规格
# 设置 Kafka 配置
Kafka配置说明
参数 | 说明 |
---|---|
节点数量 | 一个节点为一个Broker |
存储规格 | 存储规格是单节点包含副本的磁盘规格,在磁盘容量不足时,将限制生产,建议选择大于30%业务存储需求的磁盘容量。 |
消息保留最长时间 | 默认72小时,可选范围24~168小时。表示磁盘容量充足的情况下,消息的最长保留时间。 |
网络配置 | VPC Network |
实例名称 | 2-32位字符 • 支持数字、小写字母、中文以及英文下划线 |
项目 | 实例所属的项目 |
购买时长 | 确认购买时长,购买包年包月套餐时间越长越优惠 |
#
# 选择项目和计费方式
# 3. 确认购买
信息输入完成后,点击 立即购买。
# 4. 支付订单
手机打开支付宝/微信App,扫码完成支付
# 5. 创建实例
支付成功后自动返回实例列表页面,能看到实例状态为创建中
等待几分钟后,Kafka实例实例状态会变为“已启动”。如果实例创建失败,请根据界面提示,重新创建实例。
点击Kafka 实例名称,可查看Kafka基本信息
在这个页面中,你可以查看Kafka 配置信息、集群内接入点等信息
# Kafka管理
# 查看基本信息
进入 中间件首页 (opens new window),点击kafka实例名称,可以查看Kafka实例 配置信息、集群内接入点等信息
# 续费
进入 中间件首页 (opens new window),点击kafka实例名称,在基本信息页面,点击【设置】进入设置页面,点击【续费】
设置续费信息后,点击【立即购买】
# 升级配置
进入 中间件首页 (opens new window),点击kafka实例名称,在基本信息页面,点击【设置】进入设置页面,点击【升级】
选择节点数量、规格、存储的变更设置,点击【立即购买】
实例配置变更须知
- 变更配置支持节点数量、规格、存储的增加。
- 变更配置后开发云可能会重启您的实例,服务不会中断,可能存在短暂的请求失败,客户端的重试机制可以解决。
- 低版本的客户端可能无重连机制,实例重启可能导致断开连接后不可用。
- 变更配置后可能会导致分区(Partition)消息乱序,请谨慎操作。
# 常见问题
# 实例问题
消息队列 kafka 版基于哪个开源版本提供?
当前消息队列kafka版基于Apaceh Kafka V1.0.2、V0.10.2 , 推荐生产消费端选取对应版本的SDK。
是否可以访问部署消息队列 kafka 版的服务器?
不可以, 消息队列kafka版作为全托管服务,用户无需维护所有基础设施,包括操作系统更新和其他日常维护。
# 网络问题
客户端连接不上kafka 服务端?
这种问题通常是客户端网络配置问题,如用户设置了特殊的acl 规则等。建议在客户端主机上telnet xxxxxx(broker 域名)9092 检查网络是否正常。
如下显示是正确的:
- 消息队列 kafka 版支持外网访问吗?
为提升数据访问的安全性,消息队列kafka版目前仅支持用户VPC内访问。
# Topic问题
消息队列 Kafka 版不支持自动创建Topic?
消息队列 Kafka 版默认关闭自动创建topic功能,以防止用户客户端错误创建大量topic影响集群稳定性,建议用户在kafkamanager或利用sdk先创建topic,再收发消息。非必要建议不要申请打开自动创建topic。曾有用户申请打开自动创建topic,用户程序原因创建了几千topic(生产和消费为不同的业务方,生产方删除的topic,被消费方又自动创建出来了),严重影响到集群的正常工作。
如何选取Topic的副本数?
Kafka实例副本数应不少于3个,创建Topic时选择3副本或以上(不超过实例副本数)存储数据,保障数据可靠性。
为什么Topic不能减分区?
Topic减分区会造成数据丢失。这是Apache Kafka自身设计所限制的。
# 消费者组问题
kafka为什么使用消费者组?
- 一个分区只可以被消费组中的一个消费者所消费。
- 一个消费组中的一个消费者可以消费多个分区。
- 一个消费组中的不同消费者消费的分区一定不会重复。
如何在控制台删除无用的消费者组?
控制台暂未提供删除消费组功能,请通过命令行工具删除:
kafka-consumer-groups.sh --bootstrap-server slave1:9092,slave2:9092,slave3:9092 --group xxx --delete
- partition 和 consumer数目的关系是什么?
- 如果consumer比partition多,是浪费,因为kafka的设计是在一个partition上是不允许并发的,所以consumer数不要大于partition数 。
- 如果consumer比partition少,一个consumer会对应于多个partitions,这里主要合理分配consumer数和partition数,否则会导致partition里面的数据被取的不均匀 。最好partiton数目是consumer数目的整数倍,所以partition数目很重要,比如取24,就很容易设定consumer数目 。
- 如果consumer从多个partition读到数据,不保证数据间的顺序性,kafka只保证在一个partition上数据是有序的,但多个partition,根据你读的顺序会有不同。
- 增减consumer,broker,partition会导致rebalance,所以rebalance后consumer对应的partition会发生变化