我们可以将不同部分的数据放在kafa的同一主题中吗?

时间:2020-06-12 15:56:31

标签: java spring-boot apache-kafka kafka-producer-api cryptocurrency

设置了一个要添加kafka侦听器的网络套接字,我们基本上有100个主题以及同一主题的13个不同部分,例如,“ BOOKX”是一个主题,其中13个章节,因此额外的主题将是“ BOOKX1”,是否存在“ BOOKX2”等,有什么办法可以防止添加1300个主题? 我希望问题是可以理解的

2 个答案:

答案 0 :(得分:0)

如果您首先有那么多主题,这听起来像是一个设计问题。如果可以的话,尝试找到减少这种情况的方法。否则,

您可以使用分区。在Kafka中,每个主题都可以有分区。创建主题时,可以定义主题的分区数。

使用这些消息时,将为消费者组中的每个消费者分配一个特定的主题分区。这样,您可以保证给定主题分区的顺序。

缺点是,如果使用者之一发生故障,则使用者将重新平衡,并且主题分区分配也将更改。但是您可以通过多种方式处理这种情况。

因此,如果要避免使用1.3k主题,则方法是使用100个主题,每个主题有13个分区。

答案 1 :(得分:0)

不建议创建太多主题,这可能是设计不良的标志。您是出于目的使用了错误的工具,还是以错误的方式使用了它。

我想您的数据分类如下

# define your variable
cmd="something goes here"

# print what is going to run
printf "$cmd"

# then run it
$cmd 

您可以有一个名为 books 的主题,然后该主题中的每条消息将成为一本书的章节,其中键将为books { book_1 { chapter_1 {..} chapter_2 {..} chapter_3 {..} ... } ... } ,而值将为章节对象。像bookId_chapterNobook_1_chapter_1等。 如果您想使用一本特定书籍或一组书籍的所有章节,则可以按如下键进行过滤:

book_1_chapter_2

通过这种方式,每个使用者都可以丢弃不感兴趣的消息。 您可能还想更改基于key.startsWith("book_1") || key.startsWith("book_2") 而不是bookId的分区逻辑,以使来自特定书籍的消息进入相同的分区,这也使您可以利用使用者组工具。