发布者的KAFKA邮件限制?

时间:2017-08-06 08:21:08

标签: apache-kafka

我们正在使用kafka 0.10.x,我正在寻找,如果有一种方法可以阻止发布者kafka在一小时内达到某些消息/限制后停止发送消息。这里的目标是限制用户只在每小时/每天发送一定数量的消息?  如果有人遇到类似的用例,请分享您的发现。 在此先感谢......

2 个答案:

答案 0 :(得分:2)

Kafka有一些限制和配额机制,但它们都没有完全符合您每天根据消息计数严格限制生产者的要求。

来自https://kafka.apache.org/documentation/#design_quotas

的Apache Kafka 0.11.0.0文档
  

Kafka集群能够对要控制的请求强制实施配额   客户使用的代理资源。两种类型的客户配额可以   由Kafka经纪人为每组共享一个客户的人强制执行   配额:

     
      
  • 网络带宽配额定义字节速率阈值(自0.9起)

  •   
  • 请求率配额将CPU利用率阈值定义为百分比   网络和I / O线程(自0.11起)

  •   

客户配额首先在Kafka 0.9.0.0中引入。强制执行生产者和消费者的费率限制,以防止客户使网络饱和或垄断经纪人资源。

有关详细信息,请参阅KIP-13:https://cwiki.apache.org/confluence/display/KAFKA/KIP-13+-+Quotas

0.9上引入的配额机制基于客户端配置中设置的client.id,可以轻松更改。理想情况下,配额应该在经过身份验证的用户名上设置,因此不容易规避,因此在0.10.1.0中添加了一个额外的Authenticated Quota功能。

有关详细信息,请参阅KIP-55:https://cwiki.apache.org/confluence/display/KAFKA/KIP-55%3A+Secure+Quotas+for+Authenticated+Users

上述配额机制都适用于数据量(即带宽限制),而不适用于消息数量或请求数量。如果客户端发送大量小消息或发出大量不返回消息的请求(例如,将min.byte配置为0的消费者),它仍然会使代理淹没。为了解决这个问题,增加了0.11.0.0,另外还支持按请求率进行限制。

有关详细信息,请参阅KIP-124:https://cwiki.apache.org/confluence/display/KAFKA/KIP-124+-+Request+rate+quotas

如果您知道您的制作人总是发布一定大小的消息,那么您可以计算以MB表示的每日限制以及以MB /秒表示的速率限制,您可以将其配置为配额。这不适合您的需求,因为制作人可能会在12小时内没有发送任何内容,然后尝试以较快的速度发送短时间,配额仍然会将其限制为较低的发布率,因为限制是每秒强制执行的不是每天。

如果您不知道邮件大小或它变化很大,那么由于邮件是使用产品请求发布的,您可以使用请求速率限制来稍微控制经过身份验证的用户允许发布邮件的速率,但同样不会是消息/日限制,甚至不是带宽限制,而是“CPU利用率阈值占网络和I / O线程的百分比”。这有助于避免DoS问题,而不是真正限制消息计数。

如果您希望向Kafka添加消息计数配额或消息存储配额,那么很明显Kafka改进提案(KIP)流程有效,我们鼓励您在此区域或任何其他区域提交改进建议。

有关详细信息,请参阅KIP流程:https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Improvement+Proposals

答案 1 :(得分:1)

你可以使用经纪人配置:

message.max.bytes (默认值:1000000) - 代理将接受的邮件的最大大小。这必须小于使用者fetch.message.max.bytes,否则代理将拥有无法使用的消息,从而导致消费者挂起。

log.segment.bytes (默认值:1GB) - Kafka数据文件的大小。确保其大于1条消息。默认应该没问题(即大邮件在任何情况下都不应超过1GB。它是一个消息系统,而不是文件系统)

replica.fetch.max.bytes (默认值:1MB) - 代理可以复制的最大数据大小。这必须大于message.max.bytes,或 代理将接受消息并且无法复制它们。导致潜在的数据丢失。

我认为您可以调整配置以执行您想要的操作