2016-09-15 3 views
7

아래와 같이 Kafka에 와일드 카드가있는 패턴을 사용하여 구독하고 있습니다. 와일드 카드는 동적 고객 ID를 나타냅니다.kafka-python을 사용하여 여러 kafka 와일드 카드 패턴 목록을 구독하는 방법?

consumer.subscribe(pattern='customer.*.validations') 

주제 문자열에서 고객 ID를 뽑을 수 있기 때문에 잘 작동합니다. 하지만 지금은 약간 다른 목적으로 유사한 주제를 듣기 위해 기능을 확장해야합니다. customer.*.additional-validations이라고합시다. 많은 기능이 공유되기 때문에 코드는 동일한 프로젝트에 있어야하지만 큐 유형에 따라 다른 경로를 사용할 수 있어야합니다.

Kafka documentation에서 일련의 주제를 구독 할 수 있음을 알 수 있습니다. 그러나 이들은 하드 코딩 된 문자열입니다. 유연성을 허용하는 패턴이 아닙니다.

>>> # Deserialize msgpack-encoded values 
>>> consumer = KafkaConsumer(value_deserializer=msgpack.loads) 
>>> consumer.subscribe(['msgpackfoo']) 
>>> for msg in consumer: 
...  assert isinstance(msg.value, dict) 

어떻게 든 두 가지를 조합 할 수 있는지 궁금합니다. 종류의 (비 작업)처럼 다음 KafkaConsumer 코드에서

consumer.subscribe(pattern=['customer.*.validations', 'customer.*.additional-validations']) 

답변

8

, 그것은

https://github.com/dpkp/kafka-python/blob/68c8fa4ad01f8fef38708f257cb1c261cfac01ab/kafka/consumer/group.py#L717

def subscribe(self, topics=(), pattern=None, listener=None): 
     """Subscribe to a list of topics, or a topic regex pattern 
     Partitions will be dynamically assigned via a group coordinator. 
     Topic subscriptions are not incremental: this list will replace the 
     current assignment (if there is one). 

그래서 당신은 정규식을 만들 수 있습니다 주제의 목록 또는 패턴을 지원합니다 , OR 조건은 |을 사용하며 내부적으로 일치시키기 위해 re 모듈을 사용하기 때문에 여러 동적 주제 regex에 가입해야합니다.

(customer.*.validations)|(customer.*.additional-validations)

+0

감사합니다. 이 구문은 훌륭하게 작동합니다. –