kafka生产者消息投递分区?消费者选择分区?.docxVIP

kafka生产者消息投递分区?消费者选择分区?.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
kafka生产者消息投递分区?消费者选择分区? 我们晓得,生产者发送消息到主题,消费者订阅主题(以消费者组的名义订阅),而主题下是分区,消息是存储在分区中的,所以现实上生产者发送消息到分区,消费者则从分区读取消息,那么,这里问题来了,生产者将消息投递到哪个分区?消费者组中的消费者实例之间是怎样安排分区的呢?接下来,就围围着这两个问题一探到底。 2. 主题的分区数设置 在perties配置文件中可以指定一个全局的分区数设置,这是对每个主题下的分区数的默认设置,默认是1。 当然每个主题也可以本人设置分区数量,假如创建主题的时候没有指定分区数量,则会使用perties中的设置。 bin/kafka-topics.sh?--zookeeper?localhost:2181?--create?--topic?my-topic?--partitions?2?--replication-factor?1 在创建主题的时候,可以使用**--partitions**选项指定主题的分区数量 [root@localhost?kafka_2.11-2.0.0]#?bin/kafka-topics.sh?--describe?--zookeeper?localhost:2181?--topic?abc Topic:abc???????PartitionCount:2????????ReplicationFactor:1?????Configs: ????????Topic:?abc??????Partition:?0????Leader:?0???????Replicas:?0?????Isr:?0 ????????Topic:?abc??????Partition:?1????Leader:?0???????Replicas:?0?????Isr:?0 3. 生产者与分区 首先提出一个问题:生产者将消息投递到分区有没有规律?假如有,那么它是如何打算一条消息该投递到哪个分区的呢? 3.1. 默认的分区策略 The default partitioning strategy: If a partition is specified in the record, use it If no partition is specified but a key is present choose a partition based on a hash of the key If no partition or key is present choose a partition in a round-robin fashion ernals.DefaultPartitioner 默认的分区策略是: 假如在发消息的时候指定了分区,则消息投递到指定的分区 假如没有指定分区,但是消息的key不为空,则基于key的哈希值来选择一个分区 假如既没有指定分区,且消息的key也是空,则用轮询的方式选择一个分区 /** ?*?Compute?the?partition?for?the?given?record. ?* ?*?@param?topic?The?topic?name ?*?@param?key?The?key?to?partition?on?(or?null?if?no?key) ?*?@param?keyBytes?serialized?key?to?partition?on?(or?null?if?no?key) ?*?@param?value?The?value?to?partition?on?or?null ?*?@param?valueBytes?serialized?value?to?partition?on?or?null ?*?@param?cluster?The?current?cluster?metadata ?*/ public?int?partition(String?topic,?Object?key,?byte[]?keyBytes,?Object?value,?byte[]?valueBytes,?Cluster?cluster)?{ ????List?partitions?=?cluster.partitionsForTopic(topic); ????int?numPartitions?=?partitions.size(); ????if?(keyBytes?==?null)?{ ????????int?nextValue?=?nextValue(topic); ????????List?availablePartitions?=?cluster.availablePartitionsForTopic(topic); ????????

文档评论(0)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档