// SpawnSmartConsumer creates a SmartConsumer instance with the specified // configuration and starts all its goroutines. func SpawnSmartConsumer(config *config.T) (*SmartConsumer, error) { kafkaClient, err := sarama.NewClient(config.Kafka.SeedPeers, config.SaramaConfig()) if err != nil { return nil, ErrConsumerSetup(fmt.Errorf("failed to create sarama.Client: err=(%v)", err)) } offsetMgr, err := sarama.NewOffsetManagerFromClient(kafkaClient) if err != nil { return nil, ErrConsumerSetup(fmt.Errorf("failed to create sarama.OffsetManager: err=(%v)", err)) } kazooConn, err := kazoo.NewKazoo(config.ZooKeeper.SeedPeers, config.KazooConfig()) if err != nil { return nil, ErrConsumerSetup(fmt.Errorf("failed to create kazoo.Kazoo: err=(%v)", err)) } sc := &SmartConsumer{ baseCID: sarama.RootCID.NewChild("smartConsumer"), config: config, kafkaClient: kafkaClient, offsetMgr: offsetMgr, kazooConn: kazooConn, } sc.dispatcher = newDispatcher(sc.baseCID, sc, sc.config) sc.dispatcher.start() return sc, nil }