在不使用 CLI 工具的情况下,以及在尝试生成主题之前,如何以编程方式知道主题是否已在 Kafka 集群中创建?
我遇到了一个主题不存在的问题,我们的应用程序试图生成一个不存在的主题,但它只在 90 秒(元数据超时)后收到通知。我想知道是否有办法从 Java 代码中知道该主题是否存在,以便我们可以在实际尝试发送消息之前进行检查。我想我可以查看 Kafka CLI utils 使用的代码,但我想知道是否有我可能错过的 API 或更简单的方法。
正如标题所说,只是java.util.Tripwire一个尚未清理的旧 JVM 实用程序吗?有趣的是,由于某种原因,Javadoc 甚至没有公开。源代码中的简短 Javadoc 是这样说的:
- 用于检测 {@code java.util} 类中无意使用装箱的实用程序类。根据 {@link Boolean#getBoolean(String)} 是否将系统属性 {@code org.openjdk.java.util.stream.tripwire} 视为 {@code true},来打开或关闭检测。
通常应在生产使用时关闭此功能。
@apiNote 典型用法是装箱代码执行以下操作:
{ if (Tripwire.ENABLED) Tripwire.trip(getClass(), "{0} 调用 PrimitiveIterator.OfInt.nextInt()"); }
感觉像是不应该使用的东西。它使用sun.util.logging,我什至不知道它仍然存在。而且,如果我想使用它,我是否必须在应用程序可能进行自动装箱的任何地方添加该代码片段?
有人用这个来做有用的事情吗?
我正在尝试从Java代码实例化Kafka Scala案例类,它具有以下签名:
case class OffsetFetchRequest(groupId: String,
requestInfo: Seq[TopicAndPartition],
versionId: Short = OffsetFetchRequest.CurrentVersion,
correlationId: Int = 0,
clientId: String = OffsetFetchRequest.DefaultClientId)
Run Code Online (Sandbox Code Playgroud)
我能够发送所有请求的参数,除了Seq[TopicAndPartition].
在Java方面,我有以下代码:
OffsetFetchRequest offsetFetchRequest = new OffsetFetchRequest(
"someGroup",
topicAndPartitions,
(short)1,
1,
"clientId");
Run Code Online (Sandbox Code Playgroud)
正如所料,a java.util.List与Scala不兼容Seq.不过,我已经尝试了所有类型的转换方法JavaConversions和JavaConverters,我找不到任何适合这种情况.
如何seq从正常java.util.List甚至是java.util.Collection?创建Scala ?或者我接近这个错误?
我在 kubernetes 官方文档中找不到任何关于此的内容。替换长时间运行的 cron 作业的实际低级流程是什么?我想了解这一点,以便我的应用程序可以正确处理它。
\nSIGHUP/信号吗?SIGTERM作为参考,这里是Replace文档中的政策说明:
https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
\n\n\n并发策略
\n\n
\n- 替换:如果到了运行新作业的时间,并且之前的作业运行尚未完成,则 cron 作业将用新的作业运行替换当前正在运行的作业运行
\n
Kafka schema-registry 提供了一种使用通用数据契约对来自 Kafka 的数据进行序列化和反序列化的好方法。然而,数据契约(.avsc 文件)是生产者和消费者之间的粘合剂。
一旦制作人制作了 .avsc 文件,就可以将其签入制作人一侧的版本控制。根据语言,它也会自动生成类。
然而,
avro apache-kafka confluent-schema-registry confluent-platform
我需要显示以逗号分隔的数组元素。这是我到目前为止的代码:
int[] arr = { 10, 20, 30 };
int[] newArray = Arrays.copyOf(arr, arr.length + 1);
newArray[newArray.length - 1] = 40;
System.out.print("[ ");
for (int i = 0; i < newArray.length; i++) {
System.out.print(", " + newArray[i]);
if (newArray.length - 1 > newArray[i])
System.out.print(", ");
else
System.out.print(" ");
}
System.out.println("]");
Run Code Online (Sandbox Code Playgroud)
我的输出是这样的: [ , 10 , 20 , 30 , 40 ]
我需要删除第一个索引之前的逗号,并且也不要在最后一个索引之后显示它。
java ×4
apache-kafka ×2
arrays ×1
autoboxing ×1
avro ×1
cron ×1
for-loop ×1
kubernetes ×1
scala ×1