Package com.linkedin.venice.samza
Class VeniceSystemProducer
java.lang.Object
com.linkedin.venice.samza.VeniceSystemProducer
- All Implemented Interfaces:
Closeable
,AutoCloseable
,org.apache.samza.system.SystemProducer
public class VeniceSystemProducer
extends Object
implements org.apache.samza.system.SystemProducer, Closeable
VeniceSystemProducer
defines the interfaces for Samza jobs to send data to Venice stores.
Samza jobs talk to either parent or child controller depending on the aggregate mode config.
The decision of which controller should be used is made in VeniceSystemFactory
.
The "Primary Controller" term is used to refer to whichever controller the Samza job should talk to.
The primary controller should be:
1. The parent controller when the Venice system is deployed in a multi-colo mode and either:
a. Version.PushType
is PushType.BATCH
or PushType.STREAM_REPROCESSING
; or
b. @deprecated Version.PushType
is PushType.STREAM
and the job is configured to write data in AGGREGATE mode
2. The child controller when either:
a. The Venice system is deployed in a single-colo mode; or
b. The Version.PushType
is PushType.STREAM
and the job is configured to write data in NON_AGGREGATE mode-
Constructor Summary
ConstructorDescriptionVeniceSystemProducer
(String discoveryUrl, String storeName, Version.PushType pushType, String samzaJobId, String runningFabric, boolean verifyLatestProtocolPresent, VeniceSystemFactory factory, Optional<SSLFactory> sslFactory, Optional<String> partitioners, Time time) VeniceSystemProducer
(String primaryControllerColoD2ZKHost, String primaryControllerD2ServiceName, String storeName, Version.PushType pushType, String samzaJobId, String runningFabric, boolean verifyLatestProtocolPresent, VeniceSystemFactory factory, Optional<SSLFactory> sslFactory, Optional<String> partitioners) Deprecated.VeniceSystemProducer
(String primaryControllerColoD2ZKHost, String primaryControllerD2ServiceName, String storeName, Version.PushType pushType, String samzaJobId, String runningFabric, boolean verifyLatestProtocolPresent, VeniceSystemFactory factory, Optional<SSLFactory> sslFactory, Optional<String> partitioners, Time time) Deprecated.VeniceSystemProducer
(String veniceChildD2ZkHost, String primaryControllerColoD2ZKHost, String primaryControllerD2ServiceName, String storeName, Version.PushType pushType, String samzaJobId, String runningFabric, boolean verifyLatestProtocolPresent, VeniceSystemFactory factory, Optional<SSLFactory> sslFactory, Optional<String> partitioners) Construct a new instance ofVeniceSystemProducer
.VeniceSystemProducer
(String veniceChildD2ZkHost, String primaryControllerColoD2ZKHost, String primaryControllerD2ServiceName, String storeName, Version.PushType pushType, String samzaJobId, String runningFabric, boolean verifyLatestProtocolPresent, VeniceSystemFactory factory, Optional<SSLFactory> sslFactory, Optional<String> partitioners, Time time) Construct a new instance ofVeniceSystemProducer
-
Method Summary
Modifier and TypeMethodDescriptionvoid
applyAdditionalWriterConfigs
(Map<String, String> additionalWriterConfigs) void
close()
protected ControllerResponse
controllerRequestWithRetry
(Supplier<ControllerResponse> supplier, int retryLimit) protected Object
convertPartialUpdateToFullPut
(Pair<Integer, Integer> schemaIds, Object incomingWriteValueObject) protected static void
extractConcurrentProducerConfig
(Properties veniceWriterProperties, VeniceWriterOptions.Builder builder) void
Flushing the data to Venice store in case VeniceSystemProducer buffers message.VeniceWriter<byte[],
byte[], byte[]> Test methodsprotected VeniceWriter<byte[],
byte[], byte[]> This method is overridden and not used by LinkedIn internally.protected VeniceWriter<byte[],
byte[], byte[]> getVeniceWriter
(VersionCreationResponse store, Properties veniceWriterProperties) Please don't remove this method since it is still being used by LinkedIn internally.void
protected CompletableFuture<Void>
void
protected void
setControllerClient
(D2ControllerClient controllerClient) void
setExitMode
(SamzaExitMode exitMode) void
setRouterUrl
(String routerUrl) protected void
void
start()
void
stop()
-
Constructor Details
-
VeniceSystemProducer
@Deprecated public VeniceSystemProducer(String primaryControllerColoD2ZKHost, String primaryControllerD2ServiceName, String storeName, Version.PushType pushType, String samzaJobId, String runningFabric, boolean verifyLatestProtocolPresent, VeniceSystemFactory factory, Optional<SSLFactory> sslFactory, Optional<String> partitioners) Deprecated. -
VeniceSystemProducer
public VeniceSystemProducer(String veniceChildD2ZkHost, String primaryControllerColoD2ZKHost, String primaryControllerD2ServiceName, String storeName, Version.PushType pushType, String samzaJobId, String runningFabric, boolean verifyLatestProtocolPresent, VeniceSystemFactory factory, Optional<SSLFactory> sslFactory, Optional<String> partitioners) Construct a new instance ofVeniceSystemProducer
. Equivalent toVeniceSystemProducer(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.linkedin.venice.meta.Version.PushType,java.lang.String,java.lang.String,boolean,com.linkedin.venice.samza.VeniceSystemFactory,java.util.Optional<com.linkedin.venice.security.SSLFactory>,java.util.Optional<java.lang.String>,com.linkedin.venice.utils.Time)
-
VeniceSystemProducer
@Deprecated public VeniceSystemProducer(String primaryControllerColoD2ZKHost, String primaryControllerD2ServiceName, String storeName, Version.PushType pushType, String samzaJobId, String runningFabric, boolean verifyLatestProtocolPresent, VeniceSystemFactory factory, Optional<SSLFactory> sslFactory, Optional<String> partitioners, Time time) Deprecated. -
VeniceSystemProducer
public VeniceSystemProducer(String veniceChildD2ZkHost, String primaryControllerColoD2ZKHost, String primaryControllerD2ServiceName, String storeName, Version.PushType pushType, String samzaJobId, String runningFabric, boolean verifyLatestProtocolPresent, VeniceSystemFactory factory, Optional<SSLFactory> sslFactory, Optional<String> partitioners, Time time) Construct a new instance ofVeniceSystemProducer
- Parameters:
veniceChildD2ZkHost
- D2 Zk Address where the components in the child colo are announcing themselvesprimaryControllerColoD2ZKHost
- D2 Zk Address of the colo where the primary controller residesprimaryControllerD2ServiceName
- The service name that the primary controller uses to announce itself to D2storeName
- The store to write topushType
- TheVersion.PushType
to use to write to the storesamzaJobId
- A unique id used to identify jobs that can concurrently write to the same storerunningFabric
- The colo where the job is running. It is used to find the best destination for the data to be written toverifyLatestProtocolPresent
- Config to check whether the protocol versions used at runtime are valid in Venice backendfactory
- TheVeniceSystemFactory
object that was used to create this objectsslFactory
- An optionalSSLFactory
that is used to communicate with other components using SSLpartitioners
- A list of comma-separated partitioners class names that are supported.time
- An object of typeTime
. It is helpful to be configurable for testing.
-
VeniceSystemProducer
public VeniceSystemProducer(String discoveryUrl, String storeName, Version.PushType pushType, String samzaJobId, String runningFabric, boolean verifyLatestProtocolPresent, VeniceSystemFactory factory, Optional<SSLFactory> sslFactory, Optional<String> partitioners, Time time)
-
-
Method Details
-
applyAdditionalWriterConfigs
-
setRouterUrl
-
getRunningFabric
-
controllerRequestWithRetry
protected ControllerResponse controllerRequestWithRetry(Supplier<ControllerResponse> supplier, int retryLimit) -
getTopicName
-
getVeniceWriter
This method is overridden and not used by LinkedIn internally. Please update the overridden method accordingly after modifying this method. -
extractConcurrentProducerConfig
protected static void extractConcurrentProducerConfig(Properties veniceWriterProperties, VeniceWriterOptions.Builder builder) -
getVeniceWriter
protected VeniceWriter<byte[],byte[], getVeniceWriterbyte[]> (VersionCreationResponse store, Properties veniceWriterProperties) Please don't remove this method since it is still being used by LinkedIn internally. -
setupClientsAndReInitProvider
protected void setupClientsAndReInitProvider() -
start
public void start()- Specified by:
start
in interfaceorg.apache.samza.system.SystemProducer
-
close
public void close()- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-
stop
public void stop()- Specified by:
stop
in interfaceorg.apache.samza.system.SystemProducer
-
register
- Specified by:
register
in interfaceorg.apache.samza.system.SystemProducer
-
send
public void send(String source, org.apache.samza.system.OutgoingMessageEnvelope outgoingMessageEnvelope) - Specified by:
send
in interfaceorg.apache.samza.system.SystemProducer
-
send
-
put
-
delete
-
flush
Flushing the data to Venice store in case VeniceSystemProducer buffers message.- Specified by:
flush
in interfaceorg.apache.samza.system.SystemProducer
- Parameters:
s
- String representing the source of the message. Currently, VeniceSystemProducer is not using this param.
-
convertPartialUpdateToFullPut
-
setExitMode
-
getKafkaBootstrapServers
Test methods -
getInternalProducer
-
setControllerClient
-