Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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
Apache samza 如何将samza连接到其他系统以及如何编写systemFactory类_Apache Samza - Fatal编程技术网

Apache samza 如何将samza连接到其他系统以及如何编写systemFactory类

Apache samza 如何将samza连接到其他系统以及如何编写systemFactory类,apache-samza,Apache Samza,使用以下配置,我可以将samza连接到kafka broker systems.kafka.samza.factory=org.apache.samza.system.kafka.KafkaSystemFactory systems.kafka.samza.msg.serde=json systems.kafka.consumer.zookeeper.connect=localhost:2181/ systems.kafka.producer.bootstrap.servers=localhos

使用以下配置,我可以将samza连接到kafka broker

systems.kafka.samza.factory=org.apache.samza.system.kafka.KafkaSystemFactory
systems.kafka.samza.msg.serde=json
systems.kafka.consumer.zookeeper.connect=localhost:2181/
systems.kafka.producer.bootstrap.servers=localhost:9092

但我对SystemFactory类有些怀疑。如何编写我们自己的systemfactory类?SystemFactoryClass的目的是什么?请给我一些想法

您不需要实现您的KafkaSystemFactory。您刚刚实现了StreamTask

例如:

public class MyTaskClass implements StreamTask {

  public void process(IncomingMessageEnvelope envelope, MessageCollector collector, TaskCoordinator coordinator) {
  // process message
  }
}
配置:

# This is the class above, which Samza will instantiate when the job is run
task.class=com.example.samza.MyTaskClass

# Define a system called "kafka" (you can give it any name, and you can define
# multiple systems if you want to process messages from different sources)
systems.kafka.samza.factory=org.apache.samza.system.kafka.KafkaSystemFactory

# The job consumes a topic called "PageViewEvent" from the "kafka" system
task.inputs=kafka.PageViewEvent

# Define a serializer/deserializer called "json" which parses JSON messages
serializers.registry.json.class=org.apache.samza.serializers.JsonSerdeFactory

# Use the "json" serializer for messages in the "PageViewEvent" topic
systems.kafka.streams.PageViewEvent.samza.msg.serde=json

有关更多信息:

您不需要实现KafkaSystemFactory。您刚刚实现了StreamTask

例如:

public class MyTaskClass implements StreamTask {

  public void process(IncomingMessageEnvelope envelope, MessageCollector collector, TaskCoordinator coordinator) {
  // process message
  }
}
配置:

# This is the class above, which Samza will instantiate when the job is run
task.class=com.example.samza.MyTaskClass

# Define a system called "kafka" (you can give it any name, and you can define
# multiple systems if you want to process messages from different sources)
systems.kafka.samza.factory=org.apache.samza.system.kafka.KafkaSystemFactory

# The job consumes a topic called "PageViewEvent" from the "kafka" system
task.inputs=kafka.PageViewEvent

# Define a serializer/deserializer called "json" which parses JSON messages
serializers.registry.json.class=org.apache.samza.serializers.JsonSerdeFactory

# Use the "json" serializer for messages in the "PageViewEvent" topic
systems.kafka.streams.PageViewEvent.samza.msg.serde=json

有关更多信息:

您可以通过扩展
SystemFactory
接口并实现其三个抽象函数,
getConsumer
getProducer
getAdmin
来编写自己的系统工厂类。在每个函数中,以
getConsumer
为例,您希望创建一个系统客户,一个扩展
SystemConsumer
并定义系统应如何消费的另一个自定义类的实例。通过这样做,您的Samza工作将知道如何在需要时获得系统的
管理员/消费者/生产者

示例(在Scala中):

在您的配置中:

# Your system params
systems.your.samza.factory=your.package.YourSystemFactory
systems.your.consumer.param=value
systems.your.producer.param=value

通过扩展
SystemFactory
接口并实现其三个抽象函数,
getConsumer
getProducer
getAdmin
,您可以编写自己的系统工厂类。在每个函数中,以
getConsumer
为例,您希望创建一个系统客户,一个扩展
SystemConsumer
并定义系统应如何消费的另一个自定义类的实例。通过这样做,您的Samza工作将知道如何在需要时获得系统的
管理员/消费者/生产者

示例(在Scala中):

在您的配置中:

# Your system params
systems.your.samza.factory=your.package.YourSystemFactory
systems.your.consumer.param=value
systems.your.producer.param=value