Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 阿帕奇风暴中的卡夫卡喷口_Json_Apache Kafka_Apache Storm_Spout - Fatal编程技术网

Json 阿帕奇风暴中的卡夫卡喷口

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格式从卡夫卡(没有Zookeeper)消费,Storm应该会输出它。
如何为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);
        }
    }