feat: build vehicle data platform and production pipeline
This commit is contained in:
@@ -41,16 +41,38 @@ func NewKafkaSink(cfg KafkaConfig) (*KafkaSink, error) {
|
||||
if len(cfg.Brokers) == 0 {
|
||||
return nil, errors.New("kafka brokers are required")
|
||||
}
|
||||
if err := ValidateKafkaConfig(cfg); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rawTopics, fieldsTopics := kafkaTopicMaps(cfg)
|
||||
return newKafkaSinkWithWriter(&kafka.Writer{
|
||||
Addr: kafka.TCP(cfg.Brokers...),
|
||||
Balancer: &kafka.Hash{},
|
||||
AllowAutoTopicCreation: false,
|
||||
RequiredAcks: kafka.RequireAll,
|
||||
Async: false,
|
||||
}, cfg), nil
|
||||
}, KafkaConfig{
|
||||
RawTopics: rawTopics,
|
||||
FieldsTopics: fieldsTopics,
|
||||
UnifiedTopic: cfg.UnifiedTopic,
|
||||
}), nil
|
||||
}
|
||||
|
||||
func ValidateKafkaConfig(cfg KafkaConfig) error {
|
||||
rawTopics, fieldsTopics := kafkaTopicMaps(cfg)
|
||||
return topics.ValidateKafkaRawFields(protocolTopicLabels(rawTopics), protocolTopicLabels(fieldsTopics))
|
||||
}
|
||||
|
||||
func newKafkaSinkWithWriter(writer kafkaWriter, cfg KafkaConfig) *KafkaSink {
|
||||
rawTopics, fieldsTopics := kafkaTopicMaps(cfg)
|
||||
unifiedTopic := cfg.UnifiedTopic
|
||||
if unifiedTopic == "" {
|
||||
unifiedTopic = topics.Unified
|
||||
}
|
||||
return &KafkaSink{writer: writer, rawTopics: rawTopics, fieldsTopics: fieldsTopics, unifiedTopic: unifiedTopic}
|
||||
}
|
||||
|
||||
func kafkaTopicMaps(cfg KafkaConfig) (map[envelope.Protocol]string, map[envelope.Protocol]string) {
|
||||
rawTopics := map[envelope.Protocol]string{
|
||||
envelope.ProtocolGB32960: topics.RawGB32960,
|
||||
envelope.ProtocolJT808: topics.RawJT808,
|
||||
@@ -71,11 +93,15 @@ func newKafkaSinkWithWriter(writer kafkaWriter, cfg KafkaConfig) *KafkaSink {
|
||||
fieldsTopics[protocol] = topic
|
||||
}
|
||||
}
|
||||
unifiedTopic := cfg.UnifiedTopic
|
||||
if unifiedTopic == "" {
|
||||
unifiedTopic = topics.Unified
|
||||
return rawTopics, fieldsTopics
|
||||
}
|
||||
|
||||
func protocolTopicLabels(values map[envelope.Protocol]string) map[string]string {
|
||||
out := make(map[string]string, len(values))
|
||||
for protocol, topic := range values {
|
||||
out[string(protocol)] = topic
|
||||
}
|
||||
return &KafkaSink{writer: writer, rawTopics: rawTopics, fieldsTopics: fieldsTopics, unifiedTopic: unifiedTopic}
|
||||
return out
|
||||
}
|
||||
|
||||
func (s *KafkaSink) PublishRaw(ctx context.Context, env envelope.FrameEnvelope) error {
|
||||
|
||||
Reference in New Issue
Block a user