Json 阿帕奇风暴中的卡夫卡喷口
我正在用卡夫卡喷口构建一个风暴拓扑。我正在以JSON格式从卡夫卡(没有Zookeeper)消费,Storm应该会输出它。Json 阿帕奇风暴中的卡夫卡喷口,json,apache-kafka,apache-storm,spout,Json,Apache Kafka,Apache Storm,Spout,我正在用卡夫卡喷口构建一个风暴拓扑。我正在以JSON格式从卡夫卡(没有Zookeeper)消费,Storm应该会输出它。 如何为JSON数据类型定义适当的模式? 目前,我有这样的代码库,带有基本的喷口实现: val cluster = new LocalCluster() val bootstrapServers = "localhost:9092" val topologyBuilder = new TopologyBuilder() val spoutConfig = KafkaSpout
如何为JSON数据类型定义适当的模式? 目前,我有这样的代码库,带有基本的喷口实现:
val cluster = new LocalCluster()
val bootstrapServers = "localhost:9092"
val topologyBuilder = new TopologyBuilder()
val spoutConfig = KafkaSpoutConfig.builder(bootstrapServers, "test").build()
topologyBuilder.setSpout("kafka_spout", new KafkaSpout(spoutConfig), 1)
val config = new Config()
cluster.submitTopology("kafkaTest", config, topologyBuilder.createTopology())
cluster.shutdown()
我是Apache Storm的新手,因此非常乐意听取任何建议。您可以做以下几件事: 您可以定义一个。此接口允许您根据从Kafka读取的
ConsumerRecord
,定义喷口将如何构造元组
默认实现如下所示:
public static final Fields FIELDS = new Fields("topic", "partition", "offset", "key", "value");
@Override
public List<Object> apply(ConsumerRecord<K, V> record) {
return new Values(record.topic(),
record.partition(),
record.offset(),
record.key(),
record.value());
}
@Override
public Fields getFieldsFor(String stream) {
return FIELDS;
}
一旦您创建了自己的
反序列化程序
,您就可以通过执行类似于KafkaSpoutConfig.builder(bootstrapserver,“test”).setProp(ConsumerConfig.KEY\u反序列化程序\u CLASS\u CONFIG,YourDeserializer.CLASS).build()的操作来使用它。还有一个类似的消费者属性用于设置值反序列化器。什么是“Kafka(没有Zookeeper)”?您仍然需要Zookeeper,并且代理不应该充当生产者应用程序,不管怎样,storm也是一项要求吗?Kafka Streams应该能够做同样的事情,我已经将Kafka设置为docker容器,而无需Zookeper进行本地开发。风暴是卡夫卡需要的动物管理员。。。如果使用Spotify图像,则该图像已过时。。在任何情况下,JSON都没有模式。Storm只是作为stringYeah,我使用了Spotify图像,但卡夫卡制作人和Spark/Flink消费者一样工作正常,但不是Storm
@Override
public String deserialize(String topic, byte[] data) {
try {
if (data == null)
return null;
else
return new String(data, encoding);
} catch (UnsupportedEncodingException e) {
throw new SerializationException("Error when deserializing byte[] to string due to unsupported encoding " + encoding);
}
}