
# 客户端使用建议
#### Consumer使用建议
- Consumer的owner线程需确保不会异常退出，避免客户端无法发起消费请求，阻塞消费。
- 确保处理完消息后再做消息commit，避免业务消息处理失败，无法重新拉取处理失败的消息。
- Consumer不能频繁加入和退出group，频繁加入和退出，会导致Consumer频繁做rebalance，阻塞消费。
- Consumer数量不能超过Topic分区数，否则会有Consumer拉取不到消息。
- Consumer需周期poll，维持和server的心跳，避免心跳超时，导致Consumer频繁加入和退出，阻塞消费。
- Consumer拉取的消息本地缓存应有大小限制，避免OOM（Out of Memory）。
- Consumer session的超时时间设置为30秒，session.timeout.ms=30000，避免时间过短导致Consumer频繁超时做rebalance，阻塞消费。
- ROMA Connect不能保证消费重复的消息，业务侧需保证消息处理的幂等性。
- 消费线程退出要调用Consumer的close方法，避免同一个组的其他消费者阻塞session.timeout.ms的时间。
 
#### Producer使用建议
- 同步复制客户端需要配合使用：acks=-1
- 配置发送失败重试：retries=3
- 发送优化：linger.ms=0
- 生产端的JVM内存要足够，避免内存不足导致发送阻塞
 
#### Topic使用建议
- 配置要求：推荐3副本。
- 单Topic最大分区数建议为20。
- Topic副本数为3（当前版本限制，不可调整）。
 
#### 其他建议
- 连接数限制：3000
- 消息大小：不能超过10MB
- 使用SASL_SSL协议访问ROMA Connect：确保DNS具有反向解析能力，或者在hosts文件配置ROMA Connect所有节点ip和主机名映射，避免Kafka client做反向解析，阻塞连接建立。
- 磁盘容量申请超过业务量 \* 副本数的2倍，即保留磁盘空闲50%左右。
- 业务进程JVM内存使用确保无频繁FGC，否则会阻塞消息的生产和消费。
- 建议在Kafka客户端侧配置日志转储，否则容易引起磁盘被日志打满的情况。
- 一个消费组下的消费者在连接同一个MQS时，最多允许该消费组下的500个消费者进行连接，超过数量的消费者将连接失败。如果一个消费组下有超过500个消费者，且需要连接同一个MQS，需要把消费者拆分到多个消费组下。
![](https://support.huaweicloud.com/devg-roma/public_sys-resources/note_3.0-zh-cn.png)
- 若ROMA Connect实例的消息集成在开启SASL_SSL的同时，也开启了VPC内网明文访问，则VPC内无法使用SASL方式连接消息集成的Topic。
- 使用SASL方式连接消息集成的Topic时，建议在客户端所在主机的"/etc/hosts"文件中配置host和IP的映射关系，否则会引入时延。 其中，IP地址必须为消息集成的连接地址，host为每个实例主机的名称，可以自定义，但不能重复。例如：
  10.10.10.11 host01
  10.10.10.12 host02
  10.10.10.13 host03
  
 
