Madhuvishy has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/225480

Change subject: [WIP] Parallelize eventlogging processor
......................................................................

[WIP] Parallelize eventlogging processor

- Using PyKafka BalancedConsumer

Bug: T104226
Change-Id: If3470ca80740e820c89432c390354ab2494fd2bf
---
M server/bin/eventlogging-processor
M server/eventlogging/handlers.py
M server/setup.py
3 files changed, 27 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/EventLogging 
refs/changes/80/225480/1

diff --git a/server/bin/eventlogging-processor 
b/server/bin/eventlogging-processor
index 5e87fd6..823071d 100755
--- a/server/bin/eventlogging-processor
+++ b/server/bin/eventlogging-processor
@@ -125,4 +125,4 @@
 
     else:
         for w in writers_list:
-            w.send(event)
+            w.send(event)
\ No newline at end of file
diff --git a/server/eventlogging/handlers.py b/server/eventlogging/handlers.py
index 28d5680..4879b8a 100644
--- a/server/eventlogging/handlers.py
+++ b/server/eventlogging/handlers.py
@@ -24,6 +24,7 @@
 from kafka import SimpleProducer
 from kafka.producer.base import Producer
 from kafka.common import KafkaTimeoutError
+from pykafka import KafkaClient as PyKafkaClient
 
 import logging
 import logging.handlers
@@ -384,6 +385,7 @@
 def kafka_reader(
     path,
     topic='eventlogging',
+    consumer_group='eventlogging-group',
     identity='eventlogging',
     raw=False,
     **kafka_consumer_args
@@ -392,11 +394,14 @@
     Reads events from Kafka.
 
     Kafka URIs look like:
-    kafka:///b1:9092,b2:9092?topic=topic_name&auto_commit_enable=True&...
+    kafka:///b1:9092,b2:9092?topic=topic_name&consumer_group=group_name&
+    auto_commit_enable=True&...
 
-    This reader uses the kafka-python KafkaConsumer.  You may pass
-    any configs that KafkaConsumer takes as keyword arguments via
+    This reader uses the pykafka BalancedConsumer.  You may pass
+    any configs that BalancedConsumer takes as keyword arguments via
     the kafka URI query params.
+
+    FIXME: This stuff should be worked out for the BalancedConsumer:
 
     If auto_commit_enable is True, then messages will be
     marked as done as soon as they are read.  This has the
@@ -408,29 +413,36 @@
     will have to fix this problem somehow.  Perhaps a callback?
     """
     # Brokers should be in the uri path
-    brokers = path.strip('/')
+    brokers = path.strip('/').encode('ascii', 'ignore')
 
+    # FIXME: Dont think this will work for Balanced Consumer
     # remove non KafkaConsumer args from kafka_consumer_args
     kafka_consumer_args = {
         k: v for k, v in items(kafka_consumer_args)
-        if k in kafka.DEFAULT_CONSUMER_CONFIG
+        if k in inspect.getargspec(PyKafkaClient.__init__).args
     }
 
-    consumer = KafkaConsumer(
-        topic,
-        group_id=identity,
-        bootstrap_servers=brokers,
-        **kafka_consumer_args
-    )
+    kafka_client = PyKafkaClient(hosts=brokers)
+    kafka_topic = kafka_client.topics[topic]
+
+    consumer = kafka_topic.get_balanced_consumer(
+        consumer_group=consumer_group,
+        **kafka_consumer_args)
+
+    def get_message_stream(consumer):
+        while True:
+            yield consumer.consume()
 
     # No need to bother calling task_done() if we aren't going to commit.
+    """
     if consumer._config['auto_commit_enable']:
         return stream(
             (_ack_kafka_message(consumer, message) for message in consumer),
             raw
         )
     else:
-        return stream((message.value for message in consumer), raw)
+    """
+    return stream((message.value for message in get_message_stream(consumer)), 
raw)
 
 
 def _ack_kafka_message(consumer, message):
diff --git a/server/setup.py b/server/setup.py
index 8b1514b..d37903e 100644
--- a/server/setup.py
+++ b/server/setup.py
@@ -58,6 +58,7 @@
         "pygments>=1.5",
         "pyzmq>=2.1",
         "sqlalchemy>=0.7",
-        "kafka-python>=0.9.3"
+        "kafka-python>=0.9.3",
+        "pykafka>=1.0.3"
     )
 )

-- 
To view, visit https://gerrit.wikimedia.org/r/225480
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If3470ca80740e820c89432c390354ab2494fd2bf
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/EventLogging
Gerrit-Branch: master
Gerrit-Owner: Madhuvishy <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to