小编xma*_*mar的帖子

Scala Case 类伴随对象 - 类型名称冲突

我遇到了伴随对象选择其类型而不是案例类的问题

我正在使用喷雾 json serdes。他们需要一个隐式的 JsonFormat。此格式是通过调用取决于案例类参数数量的函数来获得的: jsonFormat2(Class2) 如果案例类有两个字段,例如

case class Class2(a: String, b: Integer)
Run Code Online (Sandbox Code Playgroud)

或 jsonFormat3(Class3) 的

case class Class3(a: String, b: Integer, c: Long)
Run Code Online (Sandbox Code Playgroud)

鉴于必须知道案例类在整个代码中具有的参数数量并不好,我想创建一个案例类伴随对象,以便您可以封装此信息并从类本身获取 JsonFormat,例如:

object Class2 extends DefaultJsonProtocol 
{
    def getJsonFormat() = {
        jsonFormat2(Class2)
    }
}
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,我会遇到以下编译问题:

type mismatch;
[error]  found   : mypackage.Class2.type
[error]  required: (?, ?) => ?
[error]     jsonFormat2(Class2)
Run Code Online (Sandbox Code Playgroud)

如果我们查看 jsonFormat2 中的代码,签名是:

def jsonFormat2[P1 :JF, P2 :JF, T <: Product :ClassManifest
    (construct: (P1, P2) => T): RootJsonFormat[T] = { // ... 
Run Code Online (Sandbox Code Playgroud)

如果我更改伴随对象名称(例如更改为 MyClass2),它将正常工作。所以,类型似乎是冲突的。

似乎在处理类型时,伴生对象无法像它们所使用的类那样命名。

有人可以解释为什么会发生这种情况吗?如果有限制,或者如何解决它,以便伴生对象可以使用相同的名称?

types scala spray-json companion-object

5
推荐指数
2
解决办法
1837
查看次数

Kafka Streams - 处理器 API - 转发到不同的主题

我有一个 Processor-API 处理器,它在内部转发到几个单独的接收器(想想事件分类器,尽管它在事件之间也有状态逻辑)。我正在考虑稍后将其中两个主题连接起来。一旦加入,我会将元素的更新(丰富)版本转发到我实际加入的那些主题。

如果在处理器 API 代码中转发到多个接收器(接收器 1、接收器 2),而这些接收器又被发送到主题,您将如何混合 DSL?

我想你可以创建单独的流,比如

val stream1 = builder.stream(outputTopic) 
val stream2 = builder.stream(outputTopic2)
Run Code Online (Sandbox Code Playgroud)

并从那里开始构建?然而,这会创建更多的子拓扑 - 这里的含义是什么?

另一种可能性是在处理器 API 中拥有自己的状态存储,并在同一个处理器中对其进行管理(我实际上正在这样做)。它增加了代码的复杂性,但不是更高效吗?例如,您可以删除不再使用的数据(一旦进行连接,您可以将新连接的数据转发到接收器,并且它不再符合连接条件)。还有其他效率问题吗?

apache-kafka apache-kafka-streams kafka-streams-scala

5
推荐指数
1
解决办法
2052
查看次数

Kafka Streams:是否可以对状态存储进行“压缩,删除”策略?

默认情况下,Kafka Streams 状态存储是“紧凑的”。是否可以在状态存储中使用保留策略设置“压缩,删除”?

apache-kafka apache-kafka-streams

5
推荐指数
1
解决办法
3202
查看次数

Kafka Streams:Kafka Streams应用程序陷入重新平衡

在所有Kafka代理重新启动以升级offset.retention.minutes设置(将其增加到60天)之后,消耗在那里的Kafka Streams应用程序被卡住了,并且消费者组显示了重新平衡:

bin/kafka-consumer-groups.sh --bootstrap-server ${BOOTSTRAP_SERVERS} --describe --group stream-processor | sort 

Warning: Consumer group 'stream-processor' is rebalancing.

TOPIC                  PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
customers              0          84263           84288           25              -               -               -
customers              1          71731           85068           13337           -               -               -
customers              10         71841           84801           12960           -               -               -
customers              11         84273           84336           63              -               -               -
customers              12         84189           84297           108             -               -               -
customers              13         83969           84051           82              -               -               -
customers              14         84693           84767           74              -               -               - …
Run Code Online (Sandbox Code Playgroud)

apache-kafka apache-kafka-streams

5
推荐指数
0
解决办法
729
查看次数

Kafka Streams:“协调器选择无效分配协议:空”的情况

我在 Kafka Streams 应用程序(2.1 版)的日志中发现了这个问题。

 Coordinator selected invalid assignment protocol: null
Run Code Online (Sandbox Code Playgroud)

Kafka 客户端库中的代码看起来很简单,其中没有找到分配器:

PartitionAssignor assignor = lookupAssignor(assignmentStrategy);
    if (assignor == null)
        throw new IllegalStateException("Coordinator selected invalid 
assignment protocol: " + assignmentStrategy);
Run Code Online (Sandbox Code Playgroud)

而 lookupAssignor 只是按名称查找:

private PartitionAssignor lookupAssignor(String name) {
    for (PartitionAssignor assignor : this.assignors) {
        if (assignor.name().equals(name))
            return assignor;
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

在什么情况下这可能发生在 Kafka Streams 应用程序上?后果是什么?

apache-kafka apache-kafka-streams

5
推荐指数
0
解决办法
1164
查看次数

在 SBT 中重命名程序集生成的 uberjar

如何重命名和移动使用 SBT 程序集插件生成的 uberjar?

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")
Run Code Online (Sandbox Code Playgroud)

我的 assemblyMergeStrategy(用于 META-INF 删除):

assemblyMergeStrategy in assembly := {
   case PathList("META-INF", xs @ _*) => MergeStrategy.discard
   case x => MergeStrategy.first
}
Run Code Online (Sandbox Code Playgroud)

它会生成类似以下内容的内容:

target/scala-2.12/my-project-assembly-0.1.jar 
Run Code Online (Sandbox Code Playgroud)

我希望能够使用一致的名称(不需要单独的脚本)自动重命名(并在另一个目录中生成)。

scala jar uberjar sbt sbt-assembly

3
推荐指数
1
解决办法
2657
查看次数

ClickHouse:在用作布尔值的 Uint8 上使用 LowCardinality 字段是否有意义?

LowCardinalityClickHouse 中的字段是一种优化,其中值是字典编码的,以实现更快的查找和更小的存储。根据文档

使用 LowCarditality 数据类型的效率取决于数据的多样性。如果字典包含的不同值少于 10,000 个,则 ClickHouse 大多显示出更高的数据读取和存储效率。如果字典包含超过 100,000 个不同的值,则与使用普通数据类型相比,ClickHouse 的性能可能更差。

用作布尔值的 UInt8 值怎么样?基数是 2,但占用空间如此之小 (8),它实际上会在查询中提供使用它的好处吗?

encoding cardinality clickhouse

3
推荐指数
1
解决办法
537
查看次数

Maven Proguard 插件 - “在类路径上找不到 proguard.Proguard”错误

我试图混淆带有依赖项的 jar(尽管如果我将常规单个 jar 设置为 inFile,同样的问题也会影响)。

我正在使用 Java 8,但我必须使用较新版本的 Proguard 和 Proguard Maven 插件,因为覆盖了来自更高版本的一些 jar 依赖项(否则我会遇到“不支持的主次版本”问题)。

当执行“mvn clean install”时,该步骤被执行,但我收到“在pluginArtifacts中找不到proguard jar错误”。请参阅下面的日志。

我在 Proguard Maven 插件代码中看到,现在您需要(从 7.0.0 开始)来自 com.guardsquare 的 proguard-base 和 proguard-core,而不是 net.sf.proguard 中过时的先前版本 - 这个不适合以后使用罐子。

显然,在我指定的地方找不到 proguard jar - 我应该如何包含此依赖项?

我在我的 pom 中使用这个:

<build>  
  <plugins>
      <plugin>
        <groupId>com.github.wvengen</groupId>
        <artifactId>proguard-maven-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals><goal>proguard</goal></goals>
            <configuration>
              <injar>${project.build.finalName}-jar-with-dependencies.jar</injar> 
              <outjar>${project.build.finalName}-small.jar</outjar>
              <proguardVersion>7.1.0</proguardVersion>
              <options>
                <option>-allowaccessmodification</option>
                <option>-dontoptimize</option>
                <option>-dontshrink</option>
                <option>-dontnote</option>
                <option>-dontwarn</option> <!-- added option to ignore com.sun missing classes -->
                <option>-keepattributes Signature</option>
              </options>
              <libs>
                <lib>${java.home}/lib/rt.jar</lib>
              </libs>
                 <dependencies>
                  <dependency>
                    <groupId>com.guardsquare</groupId> …
Run Code Online (Sandbox Code Playgroud)

java obfuscation proguard maven proguard-maven-plugin

3
推荐指数
1
解决办法
3321
查看次数