@@ -99,6 +99,9 @@ type Config struct {
99
99
KafkaEnabled bool `yaml:"kafka_writes_enabled"`
100
100
IngesterEnabled bool `yaml:"ingester_writes_enabled"`
101
101
KafkaConfig kafka.Config `yaml:"-"`
102
+
103
+ // TODO: cleanup config
104
+ TenantTopic TenantTopicConfig `yaml:"tenant_topic" category:"experimental"`
102
105
}
103
106
104
107
// RegisterFlags registers distributor-related flags.
@@ -107,6 +110,7 @@ func (cfg *Config) RegisterFlags(fs *flag.FlagSet) {
107
110
cfg .DistributorRing .RegisterFlags (fs )
108
111
cfg .RateStore .RegisterFlagsWithPrefix ("distributor.rate-store" , fs )
109
112
cfg .WriteFailuresLogging .RegisterFlagsWithPrefix ("distributor.write-failures-logging" , fs )
113
+ cfg .TenantTopic .RegisterFlags (fs )
110
114
fs .IntVar (& cfg .PushWorkerCount , "distributor.push-worker-count" , 256 , "Number of workers to push batches to ingesters." )
111
115
fs .BoolVar (& cfg .KafkaEnabled , "distributor.kafka-writes-enabled" , false , "Enable writes to Kafka during Push requests." )
112
116
fs .BoolVar (& cfg .IngesterEnabled , "distributor.ingester-writes-enabled" , true , "Enable writes to Ingesters during Push requests. Defaults to true." )
@@ -116,6 +120,9 @@ func (cfg *Config) Validate() error {
116
120
if ! cfg .KafkaEnabled && ! cfg .IngesterEnabled {
117
121
return fmt .Errorf ("at least one of kafka and ingestor writes must be enabled" )
118
122
}
123
+ if err := cfg .TenantTopic .Validate (); err != nil {
124
+ return errors .Wrap (err , "validating tenant topic config" )
125
+ }
119
126
return nil
120
127
}
121
128
@@ -246,6 +253,16 @@ func New(
246
253
}
247
254
kafkaWriter = kafka_client .NewProducer (kafkaClient , cfg .KafkaConfig .ProducerMaxBufferedBytes ,
248
255
prometheus .WrapRegistererWithPrefix ("loki_" , registerer ))
256
+
257
+ // TODO: cleanup/make independent of whether we write kafka as primary?
258
+ if cfg .TenantTopic .Enabled {
259
+ w , err := NewTenantTopicWriter (cfg .TenantTopic , kafkaClient , overrides , registerer , logger )
260
+ if err != nil {
261
+ return nil , fmt .Errorf ("failed to start tenant topic tee: %w" , err )
262
+ }
263
+
264
+ tee = WrapTee (tee , w )
265
+ }
249
266
}
250
267
251
268
d := & Distributor {
0 commit comments