简单问题:
假设我有一个具有3个分区的主题:Topic:StateEvents P1、P2和P3。
让我们假设生产者生成20条消息:
1, 2, 3, ..........20
我的问题是:
当制作人生成这些消息时:
1)每个消息将只在且仅在1个分区?也就是说,1在P1,2在P2,3在P3,然后4在P1,5在P2,6在P3,以此类推?
2)如果#1为真,当消费者订阅时,它将订阅所有分区,以便获得所有消息?
谢谢
每个消息将只发送到一个分区
如果key不为null,则根据配置中实现的分区方法实现分区ID计算。这是源代码
class DefaultPartitioner(props: VerifiableProperties = null) extends Partitioner {
private val random = new java.util.Random
def partition(key: Any, numPartitions: Int): Int = {
Utils.abs(key.hashCode) % numPartitions
}
}
为了确保相同类型的消息顺序性(FIFO),分区只能由同一组的一个使用者使用,不同组的使用者可以绑定同一分区以重复使用。但是消费者可以使用多个分区。
1)目标分区由生产者确定。使用默认分区算法(可以自定义),目标分区为:哈希(消息密钥)%num_partitions。这意味着具有相同键的所有消息都进入同一个分区。因此,如果您正在使用一个键,并且所有消息都具有相同的键,那么它们将进入同一个分区。如果未指定键,则使用循环。在任何情况下,消息总是只发送到一个分区。
2) 如果使用者是使用者组中唯一的使用者,则它将获得所有分区。您可以在同一消费者组中添加更多消费者以共享负载(在您的情况下,最多可以添加3个消费者,这是您在主题中拥有的分区数,因此一个消费者可以获得一个分区)。
让不同的消费者从不同的分区获取消息是Kafka如何很好地扩展的方式。这不是缺点,因为你必须考虑消费应用程序(由多个消费者制作)。应用程序标识符可以是其所有消费者使用的group id:应用程序从主题获取所有消息,但负载分散在其消费者之间。
>
当单个消费者订阅kafka主题(具有多个分区)时,它将从所有分区读取消息。但是如果使用相同的消费者group.id运行多个消费者,每个消费者将从不同的分区读取。
比方说,一个Kafka主题有3个分区,你有3个消费者有相同的group.id.每个消费者将从1-1个分区读取。但是如果只有一个消费者,它将从所有3个分区读取。
通过Kafka文档和各种其他资源,我了解到Kafka中的消息被组织成主题。此外,主题可以分解为多个分区,每个分区可以托管在不同的服务器上。这提供了冗余和可伸缩性。 我不确定这里的“破碎”这个词是什么意思。这是否意味着,如果添加到主题的消息是,例如“1 2 3 4 5 6 7”,那么在将其分解为分区后,我们将有一个分区仅包含整个主题的子部分。就像一个分区有“1 2 3”,而另一个分区有“4 5 6”
Kafka主题分区偏移位置始终从0或随机值开始,如何确保使用者记录是分区中的第一条记录?有没有办法找出答案?如果有的话,请让我知道。谢谢。
我有一个问题,假设有一个TOPIC T1,有两个消费者C1和C2属于两个不同的组,电流偏移量是0.我们知道Kafka维护消费者的偏移量。因此,如果 C1 使用消息并且 Offset 变为 1,那么如果 C2 使用消息,它将从 1 偏移量开始,还是从 0 偏移量开始使用消息,会发生什么情况?表示两个不同的消费群体将如何维持抵消? 谢啦
我在《掌握Kafka Streams and ksqlDB》一书中遇到了以下两个短语,作者使用了两个术语,它们的真正含义是“压缩主题”和“未压缩主题” 他们对“日志压缩”有什么看法吗? 表可以被认为是对数据库的更新。在日志的这种视图中,只保留每个键的当前状态(给定键的最新记录或某种聚合)。表通常是从压缩的主题构建的。 用数据库的说法,流可以被视为插入。每个不同的记录都保留在此日志视图中。流通常是从
我们希望在Kafka streams应用程序中使用GlobalKTable。输入主题(ktable/kstream)有N个分区,并且GlobalKTable将用作流应用程序中的字典。 GlobalKTable的输入主题必须与其他输入主题(它们是KTable/KStream的源)具有相同数量的分区吗? 据我所知,答案是否定的(它不受限制,主题也可能有M个分区,其中N>M),因为GlobalKTabl
我开始学习Kafka用于企业解决方案。 在我阅读的过程中,我脑海中浮现出一些问题: > 当一个生产者正在生成一个消息--它会指定它想要将消息发送到的主题,是这样吗?它关心分区吗? 当订阅服务器运行时-它是否指定其组id,以便它可以是同一主题的使用者集群的一部分,或者是该组使用者感兴趣的几个主题的一部分? 每个消费者组在代理上有一个对应的分区还是每个消费者都有一个? 分区是由代理创建的,因此不是消费