【学习笔记】Java——消息队列kafka杂记

1、多个消费者

多个消费者可以组成一个群组,它们共享一个消息流,并保证整个群组对每个给定的消息只处理一次。

2、broker的配置

主题的默认配置,kafka为新创建的主题提供很多默认配置参数。

2.1 主题的默认配置 message.max.bytes

broker通过设置message.max.bytes参数来限制单个消息的大小,默认值1MB。如果生产者尝试发送的消息超过这个大小,不仅消息不回被接收,还会收到broker返回的错误信息。该参数指的是压缩后的消息大小。也就是说,只要压缩后的消息小于message.max.bytes指定的值,消息的实际大小可以远大于这个值。
这个值对性能有显著影响。值越大,那么负责处理网络连接和请求的线程就需要花越多的时间来处理这些请求。它还会增加磁盘写入块的大小,从而影响IO吞吐量。

在服务端和客户端之间协调消息大小的配置

消费者客户端设置的fetch.message.max.bytes必须与服务器端设置的消息大小进行协调。如果这个值比message.max.bytes小,那么消费者就无法读取比较大的消息,导致出现消费者被阻塞的情况。在为集群里的broker配置replica.fetch.max.bytes参数时,也遵循同样的原则。

3、硬件

磁盘性能影响生产者,而内存影响消费者。

4、生产者的配置

4.1 bootstrap.servers API以及序列化器key/value
4.2 acks

acks参数指定了必须要有多少个分区副本收到消息,生产者才会认为消息写入是成功的。
acks=0/1/all

4.3 buffer.memory

该参数用来设置生产者内存缓冲区的大小,生产者用它缓冲要发送到服务器的消息。

4.4 compression.type

compression.type=snappy(snappy压缩算法由google发明,good)

4.5 retries 重发消息次数
4.6 batch.size

当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存的大小,按照字节数计算(而不是消息个数)。当批次被填满,批次里的所有消息会被发送出去。不过生产者并不一定都会等到批次被填满才发送,半满的批次也有可能被发送。设置值很大,不会造成延迟,只是会占用更多的内存而已。但如果设置的太小,因为生产者需要更频繁地发送消息,会增加一些额外的开销。

4.7 linger.ms

该参数指定了生产者在发送批次之前等待更多消息加入批次的时间。生产者会在批次填满或linger.ms达到上限时把批次发送出去。

4.8 client.id

服务器用它来识别消息的来源。

4.9 max.in.flight.requests.per.connection

该参数指定了生产者在收到服务器响应之前可以发送多少个消息。

4.10 timeout.ms、request.timeout.ms和metadata.fetch.timeout.ms
4.11 max.block.ms

在阻塞时间达到max.block.ms时,生产者会抛出异常。

4.12 max.request.size

该参数用于控制生产者发送的消息大小。它可以指能发送的单个消息的最大值,也可以指单个请求里所有消息总的大小。broker对可接收的消息最大值也有自己的限制(message.max.bytes),所以两边的配置最好可以匹配,避免生产者发送的消息被broker拒绝。

5、消费者的配置

kafka消费者从属于消费者群组。一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息。

5.1 fetch.min.bytes

该参数指定了消费者从服务器获取记录的最小字节数。如果消费者的数量比较多,把该属性的
值设置得大一点可以降低broker的工作负载。

fetch.max.bytes

与 fetch.min.bytes对应,配置 Consumer 在一次拉取请求中从 Kafka 中拉取的最大数据量,默认值为 52428800(B),也就是50MB。

5.2 fetch.max.wait.ms

通过fetch.min.bytes告诉kafka,等到有足够的数据时才把它返回给消费者。而fetch.max.wait.ms则用于指定broker的等待时间,默认是500ms。两个参数任一满足,则返回数据。

5.3 max.partition.fetch.bytes

该属性指定了服务器从每个分区里返回给消费者的最大字节数,它的默认值时1MB,也就是说,kakfaConsumer.poll()方法从每个分区里返回的记录最多不超过max.partition.fetch.bytes指定的字节。max.partition.fetch.bytes的值必须比broker能够接收的最大消息的字节数大(通过max.message.size属性设置)。这个参数与 fetch.max.bytes 参数相似,只不过前者用来限制一次拉取中每个分区的消息大小,而后者用来限制一次拉取中整体消息的大小。

5.4 auto.offset.reset

latest:消费者将从最新的记录开始读数据
earliest:消费者将从起始位置读取分区的记录

5.5 enable.auto.commit

该属性指定了消费者是否自动提交偏移量,默认值是true。

5.6 max.poll.records

该属性用于控制单次调用call()方法能够返回的记录数量,可以控制在轮询里需要处理的数据量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值