消息队列 Kafka 操作指南

2022-8-19 大约 8 分钟

# 消息队列 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实例的概要信息,包括计费信息和过期时间等。

  • 点击 立刻购买 按钮,进入实例创建页面。

    image-20220819180340145

# 2. 进行实例参数配置

在实例列表页面单击“创建”,进入“创建”页面,选择付费方式、基本信息、规格、网络、高级配置等信息。

# 选择版本和节点规格

image-20220819180906858

# 设置 Kafka 配置

image-20220819181002296

Kafka配置说明

参数 说明
节点数量 一个节点为一个Broker
存储规格 存储规格是单节点包含副本的磁盘规格,在磁盘容量不足时,将限制生产,建议选择大于30%业务存储需求的磁盘容量。
消息保留最长时间 默认72小时,可选范围24~168小时。表示磁盘容量充足的情况下,消息的最长保留时间。
网络配置 VPC Network
实例名称 2-32位字符 • 支持数字、小写字母、中文以及英文下划线
项目 实例所属的项目
购买时长 确认购买时长,购买包年包月套餐时间越长越优惠

#

# 选择项目和计费方式

image-20220819142649974

# 3. 确认购买

信息输入完成后,点击 立即购买

# 4. 支付订单

手机打开支付宝/微信App,扫码完成支付

image-20220819181245745

# 5. 创建实例

支付成功后自动返回实例列表页面,能看到实例状态为创建中

image-20220819181331681

等待几分钟后,Kafka实例实例状态会变为“已启动”。如果实例创建失败,请根据界面提示,重新创建实例。

点击Kafka 实例名称,可查看Kafka基本信息

image-20220819181914160

在这个页面中,你可以查看Kafka 配置信息、集群内接入点等信息

# Kafka管理

# 查看基本信息

进入 中间件首页 (opens new window),点击kafka实例名称,可以查看Kafka实例 配置信息、集群内接入点等信息

image-20220819181914160

# 续费

进入 中间件首页 (opens new window),点击kafka实例名称,在基本信息页面,点击【设置】进入设置页面,点击【续费】

image-20220819182404348

设置续费信息后,点击【立即购买】

# 升级配置

进入 中间件首页 (opens new window),点击kafka实例名称,在基本信息页面,点击【设置】进入设置页面,点击【升级】

image-20220819182509721

选择节点数量、规格、存储的变更设置,点击【立即购买】

实例配置变更须知

  1. 变更配置支持节点数量、规格、存储的增加。
  2. 变更配置后开发云可能会重启您的实例,服务不会中断,可能存在短暂的请求失败,客户端的重试机制可以解决。
  3. 低版本的客户端可能无重连机制,实例重启可能导致断开连接后不可用。
  4. 变更配置后可能会导致分区(Partition)消息乱序,请谨慎操作。

# 常见问题

# 实例问题

  1. 消息队列 kafka 版基于哪个开源版本提供?

    当前消息队列kafka版基于Apaceh Kafka V1.0.2、V0.10.2 , 推荐生产消费端选取对应版本的SDK。

  2. 是否可以访问部署消息队列 kafka 版的服务器?

    不可以, 消息队列kafka版作为全托管服务,用户无需维护所有基础设施,包括操作系统更新和其他日常维护。

# 网络问题

  1. 客户端连接不上kafka 服务端?

    这种问题通常是客户端网络配置问题,如用户设置了特殊的acl 规则等。建议在客户端主机上telnet xxxxxx(broker 域名)9092 检查网络是否正常。

    如下显示是正确的:

    image-20220819185527630

    1. 消息队列 kafka 版支持外网访问吗?

    为提升数据访问的安全性,消息队列kafka版目前仅支持用户VPC内访问。

# Topic问题

  1. 消息队列 Kafka 版不支持自动创建Topic?

    消息队列 Kafka 版默认关闭自动创建topic功能,以防止用户客户端错误创建大量topic影响集群稳定性,建议用户在kafkamanager或利用sdk先创建topic,再收发消息。非必要建议不要申请打开自动创建topic。曾有用户申请打开自动创建topic,用户程序原因创建了几千topic(生产和消费为不同的业务方,生产方删除的topic,被消费方又自动创建出来了),严重影响到集群的正常工作。

  2. 如何选取Topic的副本数?

    Kafka实例副本数应不少于3个,创建Topic时选择3副本或以上(不超过实例副本数)存储数据,保障数据可靠性。

  3. 为什么Topic不能减分区?

    Topic减分区会造成数据丢失。这是Apache Kafka自身设计所限制的。

# 消费者组问题

  1. kafka为什么使用消费者组?

    • 一个分区只可以被消费组中的一个消费者所消费。
    • 一个消费组中的一个消费者可以消费多个分区。
    • 一个消费组中的不同消费者消费的分区一定不会重复。
  2. 如何在控制台删除无用的消费者组?

    控制台暂未提供删除消费组功能,请通过命令行工具删除:

    kafka-consumer-groups.sh --bootstrap-server  slave1:9092,slave2:9092,slave3:9092 --group xxx --delete
1
  1. 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会发生变化