Broker 配置参数说明
当前 CKafka broker 端的一些配置如下,供参考:
message.max.bytes=1000012
auto.create.topics.enable=false
delete.topic.enable=true
socket.request.max.bytes=16777216
max.connections.per.ip=5000
offsets.retention.minutes=10080
allow.everyone.if.no.acl.found=true
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
Topic 配置参数说明
1. 选取合适的分区数量
从生产者的角度来看,向不同的 partition 写入是完全并行的;从消费者的角度来看,并发数完全取决于 partition 的数量(如果 consumer 数量大于 partition 数量,则必有 consumer 闲置)。因此选取合适的分区数量对于发挥 CKafka 实例的性能十分重要。
partition 的数量需要根据生产和消费的吞吐来判断。理想情况下,可以通过如下公式来判断分区的数目:
说明:
Num = max( T/PT , T/CT ) = T / min( PT , CT )
其中,Num 代表 partition 数量,T 代表目标吞吐量,PT 代表生产者写入单个 partition 的最大吞吐,CT 代表消费者从单个 partition 消费的最大吞吐。则 partition 数量应该等于 T/PT 和 T/CT 中较大的那一个。
在实际情况中,生产者写入单个 partition 的最大吞吐 PT 的影响因素和批处理的规模、压缩算法、确认机制、副本数等有关。消费者从单个 partition 消费的最大吞吐 CT 的影响因素和业务逻辑有关,需要在不同场景下实测得出。
通常建议 partition 的数量一定要大于等于消费者的数量来实现最大并发。 如果消费者数量是 5,则 partition 的数目也应该是 ≥ 5 的。同时,过多的分区会导致生产吞吐的降低和选举耗时的增加,因此也不建议过多分区。提供如下信息供参考:
单个 partition 是可以实现消息的顺序写入的。
单个 partition 只能被同消费者组的单个消费者进程消费。
单个消费者进程可同时消费多个 partition,即 partition 限制了消费端的并发能力。
partition 越多则失败后 leader 选举的耗时越长。
offset 的粒度最细是在 partition 级别的,partition 越多,查询 offset 就越耗时。
partition 的数量是可以动态增加的,只能增加不能减少。但增加会出现消息 rebalance 的情况。
2. 选取合适的副本
目前为了保证可用性副本数必须大于等于2,如果需要保障高可靠建议3副本。
注意:
副本数会影响生产/消费流量,如3副本则实际流量 = 生产流量 × 3。
3. 日志保留时间
Topic 的 log.retention.ms 配置通过控制台实例的保留时间统一设置。
4. 其他 Topic 级别配置说明
max.message.bytes=1000012
message.format.version=0.10.2-IV0
unclean.leader.election.enable=true
min.insync.replicas=1
生产者配置指南
生产端常用参数配置如下,建议客户根据实际业务场景调整配置:
batch.size=16384
acks=1
timeout.ms=30000
buffer.memory=33554432
max.block.ms=60000
linger.ms=0
max.request.size=1048576
compression.type=[none, snappy, lz4]
request.timeout.ms=30000
max.in.flight.requests.per.connection=5
retries=0
retry.backoff.ms=100
消费者配置指南
消费端常用参数配置如下,建议客户根据实际业务场景调整配置:
enable.auto.commit=true
auto.commit.interval.ms=5000
auto.offset.reset=latest
group.id=""
session.timeout.ms=10000
heartbeat.interval.ms=3000
max.poll.interval.ms=300000
fetch.min.bytes=1
fetch.max.bytes=52428800
fetch.max.wait.ms=500
max.partition.fetch.bytes=1048576
max.poll.records=500
request.timeout.ms=305000
本页内容是否解决了您的问题?