Apache kafka Kafka streaming to Ignite是否在事务模式下运行?
我在ApacheIgnite中有一个分布式数据库,还有一个ApacheKafka流式服务,将数据流传输到Ignite集群。卡夫卡拖缆的工作原理如下Apache kafka Kafka streaming to Ignite是否在事务模式下运行?,apache-kafka,ignite,acid,Apache Kafka,Ignite,Acid,我在ApacheIgnite中有一个分布式数据库,还有一个ApacheKafka流式服务,将数据流传输到Ignite集群。卡夫卡拖缆的工作原理如下 创建ignite节点以查找群集 在群集中启动kafka streamer singleton作为服务 关闭点火节点 Ignite群集处于事务模式,但我不确定这是保证ACID还是仅启用ACID。这个点燃的流媒体服务会被认为是酸性的吗 以下是卡夫卡拖缆的代码: public class IgniteKafkaStreamerService impleme
public class IgniteKafkaStreamerService implements Service {
private static final long serialVersionUID = 1L;
@IgniteInstanceResource
private Ignite ignite;
private KafkaStreamer<String, JSONObject> kafkaStreamer = new KafkaStreamer<>();
private IgniteLogger logger;
public static void main(String[] args) throws InterruptedException {
TcpDiscoverySpi spi = new TcpDiscoverySpi();
TcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();
// Set Multicast group.
//ipFinder.setMulticastGroup("228.10.10.157");
// Set initial IP addresses.
// Note that you can optionally specify a port or a port range.
ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500..47509"));
spi.setIpFinder(ipFinder);
IgniteConfiguration cfg = new IgniteConfiguration();
// Override default discovery SPI.
cfg.setDiscoverySpi(spi);
Ignite ignite = Ignition.getOrStart(cfg);
// Deploy data streamer service on the server nodes.
ClusterGroup forServers = ignite.cluster().forServers();
IgniteKafkaStreamerService streamer = new IgniteKafkaStreamerService();
ignite.services(forServers).deployClusterSingleton("KafkaService", streamer);
ignite.close();
}
@Override
public void init(ServiceContext ctx) {
logger = ignite.log();
IgniteDataStreamer<String, JSONObject> stmr = ignite.dataStreamer("my_cache");
stmr.allowOverwrite(true);
stmr.autoFlushFrequency(1000);
List<String> topics = new ArrayList<>();
topics.add(0,"IoTData");
kafkaStreamer.setIgnite(ignite);
kafkaStreamer.setStreamer(stmr);
kafkaStreamer.setThreads(4);
kafkaStreamer.setTopic(topics);
Properties props = new Properties();
props.put(StreamsConfig.APPLICATION_ID_CONFIG, "NiFi-consumer");
props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.1.242:9092");
props.put("key.deserializer", StringDeserializer.class.getName());
props.put("value.deserializer", StringDeserializer.class.getName());
props.put("group.id", "hello");
kafkaStreamer.setConsumerConfig(props);
kafkaStreamer.setSingleTupleExtractor(msg -> {
JSONObject jsonObj = new JSONObject(msg.value().toString());
String key = jsonObj.getString("id") + "," + new Date(msg.timestamp());
JSONObject value = jsonObj.accumulate("date", new Date(msg.timestamp()));
return new AbstractMap.SimpleEntry<>(key, value);
});
}
@Override
public void execute(ServiceContext ctx) {
kafkaStreamer.start();
logger.info("KafkaStreamer started.");
}
@Override
public void cancel(ServiceContext ctx) {
kafkaStreamer.stop();
logger.info("KafkaStreamer stopped.");
}
}
kafkastreamerservice公共类实现服务{
私有静态最终长serialVersionUID=1L;
@点火源
私人点火;
私有KafkaStreamer KafkaStreamer=新KafkaStreamer();
私人记录器;
公共静态void main(字符串[]args)引发InterruptedException{
TcpDiscoverySpi spi=新的TcpDiscoverySpi();
TcpDiscoveryMulticastIpFinder ipFinder=新的TcpDiscoveryMulticastIpFinder();
//设置多播组。
//ipFinder.setMulticastGroup(“228.10.10.157”);
//设置初始IP地址。
//请注意,您可以选择指定端口或端口范围。
ipFinder.setAddresses(Arrays.asList(“127.0.0.1:47500..47509”);
spi.setIpFinder(ipFinder);
IgniteConfiguration cfg=新IgniteConfiguration();
//覆盖默认的发现SPI。
cfg.setDiscoverySpi(spi);
Ignite Ignite=点火.getOrStart(cfg);
//在服务器节点上部署数据流服务。
ClusterGroup forServers=ignite.cluster().forServers();
IgniteKafCastreamerService拖缆=新的IgniteKafCastreamerService();
服务(用于服务器).deployClusterSingleton(“KafkaService”,streamer);
点燃。关闭();
}
@凌驾
公共void init(ServiceContext ctx){
logger=ignite.log();
IgniteDataStreamer stmr=ignite.dataStreamer(“我的缓存”);
stmr.allowOverwrite(真);
自动冲洗频率(1000);
列表主题=新建ArrayList();
添加(0,“物联网数据”);
kafkaStreamer.setIgnite(点火);
卡夫卡斯特雷默.塞斯特雷默(stmr);
卡夫卡斯特雷默(4);
kafkaStreamer.setTopic(主题);
Properties props=新属性();
props.put(StreamsConfig.APPLICATION_ID_CONFIG,“NiFi消费者”);
put(StreamsConfig.BOOTSTRAP\u SERVERS\u CONFIG,“192.168.1.242:9092”);
put(“key.deserializer”,StringDeserializer.class.getName());
put(“value.deserializer”,StringDeserializer.class.getName());
props.put(“group.id”、“hello”);
kafkaStreamer.setConsumerConfig(道具);
kafkaStreamer.setSingleTupleExtractor(消息->{
JSONObject jsonObj=新的JSONObject(msg.value().toString());
String key=jsonObj.getString(“id”)+,“+新日期(msg.timestamp());
JSONObject value=jsonObj.acculate(“日期”,新日期(msg.timestamp());
返回新的AbstractMap.SimpleEntry(键,值);
});
}
@凌驾
公共作废执行(ServiceContext ctx){
kafkaStreamer.start();
info(“KafkaStreamer已启动”);
}
@凌驾
公共作废取消(ServiceContext ctx){
kafkaStreamer.stop();
logger.info(“KafkaStreamer停止”);
}
}
KafkaStreamer
在引擎盖下使用IgniteDataStreamer
实现IgniteDataStreamer
本质上不是事务性的,因此没有任何事务性保证。KafkaStreamer
在引擎盖下使用IgniteDataStreamer
实现IgniteDataStreamer
本质上不是事务性的,因此没有任何事务性保证