这两者都具有高可扩展性和高可靠性,本文将说明如何集成Apache Ignite和Apache Kafka消息系统,以获得一个健壮的数据处理管道。目前,这两者的集成有两个开箱即用的解决方案,一个是KafkaStreamer,一个是IgniteSinkConnector,其中IgniteSinkConnector是基于Apache Kafka最近发布的新特性-Kafka连接器。
1.通过KafkaStreamer注入数据
从Ignite 1.3版本开始,通过他的KafkaStreamer,支持从Kafka中获取数据,然后将其注入Ignite用于基于内存的数据处理。KafkaStreamer是IgniteDataStreamer的一个实现,他会使用Kafka的消费者从Kafka代理中拉取数据,然后将数据高效地注入Ignite缓存。 要使用它,首先,需要将KafkaStreamer依赖加入pom.xml文件:
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-kafka</artifactId>
<version>${ignite.version}</version>
</dependency>
假设已经有一个缓存,键和值都是String类型,通过一个简单的方式就能实现数据的流化处理:
KafkaStreamer<String, String, String> kafkaStreamer = new KafkaStreamer<>();
try (IgniteDataStreamer<String, String> stmr = ignite.dataStreamer(null)) {
// 覆盖已有数据
stmr.allowOverwrite(true);
kafkaStreamer.setIgnite(ignite);
kafkaStreamer.setStreamer(stmr);
// 设置主题
kafkaStreamer.setTopic(someKafkaTopic);
// 设置处理Kafka流进程的线程数
kafkaStreamer.setThreads(4);
// 设置Kafka消费者的配置
kafkaStreamer.setConsumerConfig(kafkaConsumerConfig);
// 设置解码器
kafkaStreamer.setKeyDecoder(strDecoder);
kafkaStreamer.setValueDecoder(strDecoder);
kafkaStreamer.start();
}finally {
kafkaStreamer.stop();
}
至于如何配置消费者,可以参考Kafka文档
2.通过IgniteSinkConnector注入数据
Apache Ignite从即将到来的1.6版本开始,将可以通过另一种方式实现数据处理的集成。他基于Kafka连接器,这是一个从Apache Kafka 0.9版本中引入的一个新特性,它在Apache Kafka和其他的数据系统间实现了可扩展和可靠的的流化数据处理。这样的集成可以从Kafka中获得持续且安全的流化数据,然后注入Ignite用于内存中的大规模数据集的计算和事务处理。
连接器位于optional/ignite-kafka
,它和它的依赖需要加入一个Kafka运行实例的类路径中。
同时,还需要像下面这样配置连接器:
# connector
name=my-ignite-connector
connector.class=IgniteSinkConnector
tasks.max=2
topics=someTopic1,someTopic2
# cache
cacheName=myCache
cacheAllowOverwrite=true
igniteCfg=/some-path/ignite.xml
其中igniteCfg要设置为Ignite缓存配置文件的路径,cacheName设置为*/some-path/ignite.xml中设置的缓存的名字,someTopic1,someTopic2是数据的来源,cacheAllowOverwrite设置为true*,它会覆盖缓存中的已有数据。 另一个重要的配置是Kafka连接器属性,可以看如下的示例:
bootstrap.servers=localhost:9092
key.converter=org.apache.kafka.connect.storage.StringConverter
value.converter=org.apache.kafka.connect.storage.StringConverter
key.converter.schemas.enable=false
value.converter.schemas.enable=false
internal.key.converter=org.apache.kafka.connect.storage.StringConverter
internal.value.converter=org.apache.kafka.connect.storage.StringConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false
offset.storage.file.filename=/tmp/connect.offsets
offset.flush.interval.ms=10000
这时可以启动连接器,比如,在一个独立运行模式中可以这样:
bin/connect-standalone.sh myconfig/connect-standalone.properties myconfig/ignite-connector.properties
3.流程验证
可以通过一个简单的方式,做一下这个流程的基本验证。 启动Zookeeper和Kafka服务:
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
因为这个示例只能处理字符串数据,所以只是通过kafka-console-producer注入key1和val1(这么做只是为了举例--正常的话需要使用一个Kafka生产者或者数据源头的连接器来注入数据):
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test --property parse.key=true --property key.separator=, key1,val1
然后,按照前述的方法启动连接器。
完成!数据全部注入Ignite缓存,已经可以进行内存内的处理,或者通过SQL查询进行分析(可以参照Apache Ignite文档)。
本文翻译整理自Roman Shtykh的博客。
来源:oschina
链接:https://my.oschina.net/u/1259554/blog/631587