14

我想知道简单主题和分区主题有什么区别。根据我的理解,为了平衡负载,主题已经分区,每条消息都会有偏移量,消费者会确认以确保之前的消息已经被消费。万一没有分区和消费者不匹配 kafka 完成的重新平衡是否有效管理。

如果创建多个主题而不是分区是否会影响运行效率。

4

1 回答 1

28

来自kafka文档

日志中的分区有多种用途。首先,它们允许日志扩展到超出单个服务器的大小。每个单独的分区必须适合托管它的服务器,但一个主题可能有很多分区,因此它可以处理任意数量的数据

为任何给定主题拥有多个分区允许 Kafka 将其分布在 Kafka 集群中。因此,处理来自不同分区的数据的请求可以在整个集群中的多个服务器之间进行划分。此外,每个分区都可以跨多个服务器复制,以最大限度地减少数据丢失。再次来自文档页面

日志的分区分布在 Kafka 集群中的服务器上,每个服务器处理数据和请求分区共享。每个分区都在可配置数量的服务器上复制以实现容错。

因此,具有单个分区的主题将不允许您使用这些灵活性。另请注意,在现实生活环境中,您可以有不同的主题来保存不同类别的消息(尽管也可以有一个具有多个分区的单个主题,其中每个分区可以在生成时使用 messgae 键具有特定类别的消息)。

我不认为创建多个主题而不是分区会对整体性能产生太大影响。但是想象一下,您想要跟踪用户在您的站点中发布的所有推文。然后,您可以拥有一个名为“User_tweet”的主题,其中包含多个分区,以便在生成消息时,Kafka 可以跨多个分区分发数据,并且在消费者端,您只需要让一组消费者从同一主题中提取数据。相反,保留“User_tweet_1”、“User_tweet_2”、“User_tweet_3”只会让您在生成和使用消息时变得复杂。

于 2015-01-07T14:05:02.413 回答