kafka配置参数

为什么需要关心topic的配置

这些参数会影响topic的性能和行为。

常见的参数配置

1 、partition count

一开始就要设置好partition的个数,不要在后面动态的增加partition,否则会破坏key和partition配置的对应关系。
粗略统计,每增加一个partition会给系统增加10MB/sec的吞吐量。

更多的partition意味着;

  • 更好的并行性和吞吐量
  • BUT 系统需要打开更多的文件
  • BUT 如果一个broker挂掉,而这个broker有好多文件,需要选出新的leader broker系统才能重新工作,而过多的文件会造成延迟
  • BUT 会造成更多的replicate延迟操作

建议个数:

  • 一个broker里面partition的个数在2000~4000之间
  • partition个数小于20000
  • 每个topic的partition个数 = (1 to 2) * (# of brokers), max 10 partitions
  • 例如有3个brokers, 最好设置3~6个partitions

2、replication count

增加replication factor个数,会消耗更多的磁盘空间,也会对集群造成很大的压力。

更多的RF意味着;

  • 系统更强的健壮性,可以容忍N-1个broker挂掉
  • BUT 更长的replication(当设置acks=all的时候,需要得到所有的broker相应)】
  • BUT 更多的磁盘空间(50% more if RF is 3 instead of 2)

建议个数:3个broker

3、partitions and segments

单个partition是由segment组成的,每个segment都对应一个文件。每个segment都有一个开始和结束的位置(字节为单位的offset),对于同一个partition来说,同一时间只有唯一一个active segment,也就是说数据会被追加到active segment里面。
在这里插入图片描述
log.segment.bytes: the max size of a single segment in bytes
log.segment.ms: the Kafka will wait before committing the segment if not full

以上图为例,每一个segment的大小是958字节,当数据写满958个字节后,对应的segment就会关闭,再创建一个新的segment。

对于每一个segment来说,都有两个index(文件):
an offset to position index(空间):通过位置去定位信息
a timestamp to offset index(时间):通过时间戳定位信息
这两个索引文件是伴随着segment存储在kafka中的

默认情况下log.segment.bytes = 1GB,设置过小会有什么影响

  • 每个partition会有更多的segment
  • 更多的log compaction事件
  • BUT 需要打开太多的文件

实际开发中需要关心一下吞吐量,如果是3GB,就可以使用默认参数。

默认情况下log.segment.ms = 1 week,设置过小会有什么影响

  • 产生更多的log compaction

4、Log Cleanup Policy

可以删除不需要的数据,维护kafka cluster的成本更低,同时有更高的性能。
log cleanup发生在partitions segment上面!

每当partition创建一个segment后,都会触发一个潜在的log cleanup需求,因此,如果segment比较小,就会有更多的log cleanup需求。
默认情况下,segment是1GB。

policy 1 :log.cleanup.policy = delete

  • 有最大有效时间,一般默认保存一周;
  • 有最大容量,默认无限大。

policy 2 :log.cleanup.policy = compact

  • 根据key来删除数据;
  • 如果有相同的key就会删除之前相同key的value;
  • 不会限制存储时间和数据大小。

相当于是快照数据。

其它参数

  • max.message.bytes
    默认1MB,可以发送给topic的单个message的大小,如果修改需要同步修改consumer侧的参数值。

  • min.isync.replicas
    默认是1,最少的需要的replica的响应数量。

  • unclean.leader.election
    默认是true, 是否允许位做完数据同步的replica作为leader broker。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了以下Kafka配置参数: 1. spring.kafka.bootstrap-servers:Kafka集群的地址列表,用逗号分隔。 2. spring.kafka.client-id:Kafka客户端ID,默认为空。 3. spring.kafka.consumer.auto-commit-interval:自动提交偏移量的时间间隔(毫秒)。默认值为5000。 4. spring.kafka.consumer.auto-offset-reset:当服务器上没有初始偏移量或当前偏移量不可用时,应该从哪里开始消费。可选值为latest(从最新记录开始消费)或earliest(从最早的记录开始消费)。默认为latest。 5. spring.kafka.consumer.enable-auto-commit:是否启用自动提交偏移量。默认为true。 6. spring.kafka.consumer.fetch-max-wait:等待从Kafka获取消息的最长时间(毫秒)。默认为500。 7. spring.kafka.consumer.group-id:这个消费者所属的消费者组ID。 8. spring.kafka.consumer.key-deserializer:键的反序列化程序类。 9. spring.kafka.consumer.value-deserializer:值的反序列化程序类。 10. spring.kafka.listener.concurrency:侦听器容器的并发性级别。默认为1。 11. spring.kafka.producer.acks:producer期望从broker收到的确认数。可选值为0(不需要确认),1(需要确认leader),all(需要确认所有副本)。默认为1。 12. spring.kafka.producer.batch-size:单个批次的大小(字节)。默认为16384。 13. spring.kafka.producer.bootstrap-servers:Kafka集群的地址列表,用逗号分隔。 14. spring.kafka.producer.buffer-memory:生产者可以使用的总内存字节来缓冲消息。默认为33554432。 15. spring.kafka.producer.compression-type:消息压缩类型(gzip,snappy或lz4)。默认为none。 16. spring.kafka.producer.key-serializer:键的序列化程序类。 17. spring.kafka.producer.retries:在抛出异常之前重试发送消息的次数。默认为0。 18. spring.kafka.producer.value-serializer:值的序列化程序类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值