【发布时间】:2015-01-24 21:15:25
【问题描述】:
kafka 集群中主题的分区和副本有什么区别。 我的意思是两者都将消息的副本存储在一个主题中。那么真正的区别是什么?
【问题讨论】:
标签: hadoop apache-kafka
kafka 集群中主题的分区和副本有什么区别。 我的意思是两者都将消息的副本存储在一个主题中。那么真正的区别是什么?
【问题讨论】:
标签: hadoop apache-kafka
将消息添加到主题时,会调用生产者 API 的 send(KeyedMessage message) 方法。这意味着您的消息包含键和值。创建主题时,您指定希望它拥有的分区数。当您为此主题调用“发送”方法时,数据将根据您的键的哈希值仅发送到一个特定的分区(默认情况下)。每个分区可能有一个副本,这意味着分区及其副本都存储相同的数据。限制是您的生产者和消费者都只使用主副本,其副本仅用于冗余。
参考文档:http://kafka.apache.org/documentation.html#producerapi 还有基础培训:http://www.slideshare.net/miguno/apache-kafka-08-basic-training-verisign
【讨论】:
主题跨多个节点进行分区,因此主题可以超出节点的限制。复制分区以实现容错。复制和领导接管是 Kafka 与其他经纪人/Flume 之间的最大区别之一。来自Apache Kafka site:
每个分区都有一个服务器作为“领导者”,零或 更多充当“追随者”的服务器。领导者处理所有读取和 在追随者被动的情况下写入分区请求 复制领导者。如果领导者失败,其中一个追随者将 自动成为新的领导者。每个服务器充当领导者 它的一些分区和其他分区的追随者,所以负载很好 在集群内保持平衡。
【讨论】:
Kafka 主题分为多个分区。写入特定主题的任何记录都会进入特定分区。每条记录都由唯一的偏移量分配和标识。复制在分区级别实现。主题分区的冗余单元称为副本。决定消息分区的逻辑是可配置的。分区通过拆分分布在多个代理上的不同分区来帮助并行读取/写入数据。每个副本都有一个服务器充当领导者,其他服务器充当追随者。领导者处理读/写,而追随者复制数据。如果leader失败了,任何一个follower都会被选举为leader。
希望这能解释清楚!
【讨论】:
分区:每个主题都可以拆分为多个分区,以实现负载均衡(可以同时写入不同的分区)和可扩展性(主题可以扩展而不受实例限制);在同一分区内,记录是有序的;
replica:主要是为了容错持久性;
日志的分区分布在 Kafka 集群中的服务器上,每个服务器处理数据和请求共享分区。每个分区都在可配置数量的服务器上复制以实现容错。
有一个非常直观的教程来解释Kafka中的一些基本概念:https://www.tutorialspoint.com/apache_kafka/apache_kafka_fundamentals.htm
此外,还有一个工作流程可以帮助您度过难关:https://www.tutorialspoint.com/apache_kafka/apache_kafka_workflow.htm
【讨论】:
简单来说,分区用于可扩展性,复制用于可用性。
【讨论】: