在Kafka配置中,有几个关键参数尤为重要,它们可以根据业务需求进行调优,以优化性能、可靠性和可用性。以下是一些最关键的参数及其建议值:
吞吐量优先
- num.partitions:分区个数,设置为与消费者的线程数基本相等。
- batch.size:批量提交消息的字节数,建议设置为1M。
- linger.ms:发送间隔时间,建议设置为100ms以上。
- compression.type:压缩类型,建议使用lz4压缩。
- acks:应答机制,建议设置为all。
- buffer.memory:内存缓冲区大小,建议设置为64M以上。
延迟优先
- num.partitions:分区个数,设置为与消费者的线程数基本相等。
- num.io.threads:负责写磁盘的线程数,建议占总核数的50%。
- num.replica.fetchers:副本拉取线程数,建议占总核数的50%的1/3。
- num.network.threads:数据传输线程数,建议占总核数的50%的2/3。
- linger.ms:设置为0,即有消息就发送。
- compression.type:设置为none。
- acks:设置为0,异步发送。
可靠性优先
- default.replication.factor:至少设置为3。
- min.insync.replicas:当生产者的ack设置为all时,建议设置为2。
- unclean.leader.election.enable:建议设置为false。
- acks:设置为all。
- retries:重试次数,建议>=3。
可用性优先
- num.partitions:分区个数,设置为与消费者的线程数基本相等。
- num.io.threads:负责写磁盘的线程数,建议占总核数的50%。
- num.replica.fetchers:副本拉取线程数,建议占总核数的50%的1/3。
- num.network.threads:数据传输线程数,建议占总核数的50%的2/3。
- auto.create.topics.enable:建议设置为false。
- unclean.leader.election.enable:建议设置为false。
这些参数的调整需要根据具体的业务场景和需求来进行,以达到最佳的性能和可靠性平衡。