从编码的角度来看,kafka 和 mapr 流有什么区别?
what are the differences between kafka and mapr streams from coding perspective?
从编码的角度来看,kafka 和 mapr 流有什么区别?。我需要在未来实现 mapr 流,但目前我只能访问 kafka,所以现在探索 kafka 是否有用?这样我就可以在获得访问权限后轻松获取 mapr 流?
我没有使用过 MapR Streams(因为它不是开源的),但我的理解是他们克隆了 Kafka 0.9 Java API。所以,如果你使用的是 Kafka 0.9 客户端,它应该非常相似(但你需要使用他们的客户端,而不是 Apache 的)。
此外,请注意其他语言的客户端将不可用。其他使用不同 APIs(尤其是 Spark Streaming)的 Apache 项目将需要特殊的 MapR 兼容版本。
因此,在编码方面,Kafka 和 MapR Stream API 没有太大区别。
但在配置和API参数方面存在一些差异:
- Kafka支持Receiver和Direct这两种方式,但是MapR流只支持Direct方式.
- 从头读取数据的offset重置配置值,在Kafka中是smallest,在MapR Stream中是earliest。
- Kafka API 支持在方法中传递 Key 和 Value 反序列化器参数,但在 MapR 流中 API 您必须在 Kafka params map 中针对 [= 配置它们55=] 和 value.deserializer 键。
Kafka 和 MapR Stream API 调用接收 DStream 的直接方法示例:
卡夫卡API:
// setting the topic.
HashSet<String> topicsSet = new HashSet<String>(Arrays.asList("myTopic"));
// setting the broker list.
Map<String, String> kafkaParams = new HashMap<String, String>();
kafkaParams.put("metadata.broker.list", "localhost:9092");
// To read the messages from start.
kafkaParams.put("auto.offset.reset", "smallest");
// creating the DStream
JavaPairInputDStream<byte[], byte[]> kafkaStream = KafkaUtils.createDirectStream(streamingContext, byte[].class, byte[].class, DefaultDecoder.class, DefaultDecoder.class, kafkaParams, topicsSet);
MapR 流API:
// setting the topic.
HashSet<String> topicsSet = new HashSet<String>(Arrays.asList("myTopic"));
// setting the broker list.
Map<String, String> kafkaParams = new HashMap<String, String>();
kafkaParams.put("metadata.broker.list", "localhost:9092");
// To read the messages from start.
kafkaParams.put("auto.offset.reset", "earliest");
// setting up the key and value deserializer
kafkaParams.put("key.deserializer", StringDeserializer.class.getName());
kafkaParams.put("value.deserializer", ByteArrayDeserializer.class.getName());
// creating the DStream
JavaPairInputDStream<byte[], byte[]> kafkaStream = KafkaUtils.createDirectStream(streamingContext, byte[].class, byte[].class, kafkaParams, topicsSet);
希望以上解释能帮助您理解Kafka和MapR StreamAPI的区别。
谢谢,
霍卡姆
www.streamanalytix.com
从编码的角度来看,kafka 和 mapr 流有什么区别?。我需要在未来实现 mapr 流,但目前我只能访问 kafka,所以现在探索 kafka 是否有用?这样我就可以在获得访问权限后轻松获取 mapr 流?
我没有使用过 MapR Streams(因为它不是开源的),但我的理解是他们克隆了 Kafka 0.9 Java API。所以,如果你使用的是 Kafka 0.9 客户端,它应该非常相似(但你需要使用他们的客户端,而不是 Apache 的)。
此外,请注意其他语言的客户端将不可用。其他使用不同 APIs(尤其是 Spark Streaming)的 Apache 项目将需要特殊的 MapR 兼容版本。
因此,在编码方面,Kafka 和 MapR Stream API 没有太大区别。
但在配置和API参数方面存在一些差异:
- Kafka支持Receiver和Direct这两种方式,但是MapR流只支持Direct方式.
- 从头读取数据的offset重置配置值,在Kafka中是smallest,在MapR Stream中是earliest。
- Kafka API 支持在方法中传递 Key 和 Value 反序列化器参数,但在 MapR 流中 API 您必须在 Kafka params map 中针对 [= 配置它们55=] 和 value.deserializer 键。
Kafka 和 MapR Stream API 调用接收 DStream 的直接方法示例:
卡夫卡API:
// setting the topic.
HashSet<String> topicsSet = new HashSet<String>(Arrays.asList("myTopic"));
// setting the broker list.
Map<String, String> kafkaParams = new HashMap<String, String>();
kafkaParams.put("metadata.broker.list", "localhost:9092");
// To read the messages from start.
kafkaParams.put("auto.offset.reset", "smallest");
// creating the DStream
JavaPairInputDStream<byte[], byte[]> kafkaStream = KafkaUtils.createDirectStream(streamingContext, byte[].class, byte[].class, DefaultDecoder.class, DefaultDecoder.class, kafkaParams, topicsSet);
MapR 流API:
// setting the topic.
HashSet<String> topicsSet = new HashSet<String>(Arrays.asList("myTopic"));
// setting the broker list.
Map<String, String> kafkaParams = new HashMap<String, String>();
kafkaParams.put("metadata.broker.list", "localhost:9092");
// To read the messages from start.
kafkaParams.put("auto.offset.reset", "earliest");
// setting up the key and value deserializer
kafkaParams.put("key.deserializer", StringDeserializer.class.getName());
kafkaParams.put("value.deserializer", ByteArrayDeserializer.class.getName());
// creating the DStream
JavaPairInputDStream<byte[], byte[]> kafkaStream = KafkaUtils.createDirectStream(streamingContext, byte[].class, byte[].class, kafkaParams, topicsSet);
希望以上解释能帮助您理解Kafka和MapR StreamAPI的区别。
谢谢,
霍卡姆
www.streamanalytix.com