设置或更改分区

xiozqbni  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(304)

我们有一个流处理器应用程序,它使用具有n个分区(n>1)的主题中的数据。
从一开始(没有changelog主题),dev环境总是创建一个带有n个分区的changelog主题。
在相同的场景中,在生产环境中,分区数始终等于1,然后我们手动将其更改为n,以匹配主题的分区数。
我检查了所有文档,试图为changelog设置分区数,但找不到任何方法。最后一个选项是检查changelog主题是否不存在,然后用n个分区创建它。
既然框架自动创建了该主题,那么有没有办法设置changelog的分区数,而不必手动或在代码中创建该主题?
ps:我们使用的是Kafka客户端版本2.3.1。
谢谢,
奥斯汀

d5vmydt9

d5vmydt91#

我刚刚查看了源代码以了解此特性的详细信息,在撰写本文时,发现设置 change-logs 不允许使用主题。

解释

这个 change-logs 主题被归类为一个内部主题,在下面的两个类中有证据表明这一点( InternalTopicConfig 以及 InternalTopicManager ):
internaltopicconfig类的源代码包含以下方法,该方法还表示强制执行此类内部主题上的分区数:

public void setNumberOfPartitions(final int numberOfPartitions) {
if (hasEnforcedNumberOfPartitions()) {
    throw new UnsupportedOperationException("number of partitions are enforced on topic " +
                                            "" + name() + " and can't be altered.");
...

internaltopicmanager类源代码中的嵌入文档清楚地说明了 makeReady() 方法。

/**

* Prepares a set of given internal topics.
* 
* If a topic does not exist creates a new topic.
* If a topic with the correct number of partitions exists ignores it.
* If a topic exists already but has different number of partitions we fail and throw exception requesting user to reset the app before restarting again.
* @return the set of topics which had to be newly created
* /

public Set<String> makeReady(final Map<String, InternalTopicConfig> topics) 
...

正如您在注解中所看到的,如果这样的主题具有正确的分区计数,那么它将被忽略,如果分区计数不正确,那么您将看到错误,建议使用应用程序重置工具。
希望这有帮助!

pn9klfpd

pn9klfpd2#

目前,我们正在连接到支持ssl的msk主题,因此我们没有通过应用程序创建内部主题的写入权限。因此,作为一种解决方法,我们要求msk管理员手动创建具有所需名称的changelog主题,以便应用程序能够读取它。
此外,目前我们所有的用户主题都有3个分区,而创建的changelog主题也有3个分区,并具有以下更新的设置。如果您试图手动创建changelog主题(启用压缩以节省空间),这些设置将非常有用:
更改日志的配置
此外,changelog主题名称如下所示:(您的应用程序id)-(materialedas下的用户定义属性)-changelog

相关问题