org.I0Itec.zkclient.ZkClient Scala Examples
The following examples show how to use org.I0Itec.zkclient.ZkClient.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: KafkaClient.scala From incubator-retired-gearpump with Apache License 2.0 | 6 votes |
package org.apache.gearpump.streaming.kafka.lib.util import kafka.admin.AdminUtils import kafka.cluster.Broker import kafka.common.TopicAndPartition import kafka.consumer.SimpleConsumer import kafka.utils.{ZKStringSerializer, ZkUtils} import org.I0Itec.zkclient.ZkClient import org.apache.gearpump.streaming.kafka.lib.source.consumer.KafkaConsumer import org.apache.gearpump.streaming.kafka.util.KafkaConfig import org.apache.gearpump.util.LogUtil import org.apache.kafka.clients.producer.KafkaProducer import org.apache.kafka.common.serialization.Serializer object KafkaClient { private val LOG = LogUtil.getLogger(classOf[KafkaClient]) val factory = new KafkaClientFactory class KafkaClientFactory extends java.io.Serializable { def getKafkaClient(config: KafkaConfig): KafkaClient = { val consumerConfig = config.getConsumerConfig val zkClient = new ZkClient(consumerConfig.zkConnect, consumerConfig.zkSessionTimeoutMs, consumerConfig.zkConnectionTimeoutMs, ZKStringSerializer) new KafkaClient(config, zkClient) } } } class KafkaClient(config: KafkaConfig, zkClient: ZkClient) { import org.apache.gearpump.streaming.kafka.lib.util.KafkaClient._ private val consumerConfig = config.getConsumerConfig def getTopicAndPartitions(consumerTopics: List[String]): Array[TopicAndPartition] = { try { ZkUtils.getPartitionsForTopics(zkClient, consumerTopics).flatMap { case (topic, partitions) => partitions.map(TopicAndPartition(topic, _)) }.toArray } catch { case e: Exception => LOG.error(e.getMessage) throw e } } def getBroker(topic: String, partition: Int): Broker = { try { val leader = ZkUtils.getLeaderForPartition(zkClient, topic, partition) .getOrElse(throw new RuntimeException( s"leader not available for TopicAndPartition($topic, $partition)")) ZkUtils.getBrokerInfo(zkClient, leader) .getOrElse(throw new RuntimeException(s"broker info not found for leader $leader")) } catch { case e: Exception => LOG.error(e.getMessage) throw e } } def createConsumer(topic: String, partition: Int, startOffsetTime: Long): KafkaConsumer = { val broker = getBroker(topic, partition) val soTimeout = consumerConfig.socketTimeoutMs val soBufferSize = consumerConfig.socketReceiveBufferBytes val clientId = consumerConfig.clientId val fetchSize = consumerConfig.fetchMessageMaxBytes val consumer = new SimpleConsumer(broker.host, broker.port, soTimeout, soBufferSize, clientId) KafkaConsumer(topic, partition, startOffsetTime, fetchSize, consumer) } def createProducer[K, V](keySerializer: Serializer[K], valueSerializer: Serializer[V]): KafkaProducer[K, V] = { new KafkaProducer[K, V](config.getProducerConfig, keySerializer, valueSerializer) } def createTopic(topic: String, partitions: Int, replicas: Int): Boolean = { try { if (AdminUtils.topicExists(zkClient, topic)) { LOG.info(s"topic $topic exists") true } else { AdminUtils.createTopic(zkClient, topic, partitions, replicas) LOG.info(s"created topic $topic") false } } catch { case e: Exception => LOG.error(e.getMessage) throw e } } def close(): Unit = { zkClient.close() } }
Example 2
Source File: ZookeeperHarness.scala From incubator-retired-gearpump with Apache License 2.0 | 5 votes |
package org.apache.gearpump.streaming.kafka.util import kafka.utils.{TestZKUtils, Utils, ZKStringSerializer} import kafka.zk.EmbeddedZookeeper import org.I0Itec.zkclient.ZkClient trait ZookeeperHarness { val zkConnect: String = TestZKUtils.zookeeperConnect val zkConnectionTimeout = 60000 val zkSessionTimeout = 60000 private var zookeeper: EmbeddedZookeeper = null private var zkClient: ZkClient = null def getZookeeper: EmbeddedZookeeper = zookeeper def getZkClient: ZkClient = zkClient def setUp() { zookeeper = new EmbeddedZookeeper(zkConnect) zkClient = new ZkClient(zkConnect, zkSessionTimeout, zkConnectionTimeout, ZKStringSerializer) } def tearDown() { zkClient.close() Utils.swallow(zookeeper.shutdown()) } }
Example 3
Source File: StreamHQL.scala From spark-cep with Apache License 2.0 | 5 votes |
import java.util.Properties import kafka.consumer.ConsumerConfig import org.I0Itec.zkclient.ZkClient import org.apache.log4j.{Level, Logger} import org.apache.spark.sql.hive.HiveContext import org.apache.spark.sql.streaming.StreamSQLContext import org.apache.spark.sql.streaming.sources.MessageDelimiter import org.apache.spark.streaming.dstream.ConstantInputDStream import org.apache.spark.streaming.{Seconds, StreamingContext} import org.apache.spark.{SparkConf, SparkContext} import redis.RedisManager import scala.util.parsing.json.JSON class TabDelimiter extends MessageDelimiter { override val delimiter = "\t" } object StreamDDL { def main(args: Array[String]): Unit = { Logger.getRootLogger.setLevel(Level.WARN) val query = args(0) val sc = new SparkContext(new SparkConf()) val ssc = new StreamingContext(sc, Seconds(1)) val streamSqlContext = new StreamSQLContext(ssc, new HiveContext(sc)) streamSqlContext.command(query) new ConstantInputDStream[Int](ssc, sc.parallelize(Seq(1))).print ssc.start() ssc.awaitTerminationOrTimeout(100) ssc.stop() } } object StreamHQL { object Redis { var initialized = false var manager: RedisManager = _ def init(confMap: Map[String, String]) { if (initialized == false) { manager = new RedisManager( confMap("redis.shards"), confMap("redis.sentinels"), confMap("redis.database").toInt) manager.init initialized = true } } } def removeConsumerGroup(zkQuorum: String, groupId: String) { val properties = new Properties() properties.put("zookeeper.connect", zkQuorum) properties.put("group.id", groupId) val conf = new ConsumerConfig(properties) val zkClient = new ZkClient(conf.zkConnect) zkClient.deleteRecursive(s"/consumers/${conf.groupId}") zkClient.close() } def main(args: Array[String]): Unit = { Logger.getRootLogger.setLevel(Level.WARN) val confMap = JSON.parseFull(args(0)).get.asInstanceOf[Map[String, String]] val qid = args(1) val query = args(2) val sc = new SparkContext(new SparkConf()) val ssc = new StreamingContext(sc, Seconds(1)) val hc = new HiveContext(sc) val streamSqlContext = new StreamSQLContext(ssc, hc) val redisExpireSec = confMap("redis.expire.sec").toInt ssc.checkpoint(s"checkpoint/$qid") hc.setConf("spark.streaming.query.id", qid) hc.setConf("spark.sql.shuffle.partitions", confMap("spark.sql.shuffle.partitions")) removeConsumerGroup(confMap("kafka.zookeeper.quorum"), qid) val result = streamSqlContext.sql(query) val schema = result.schema result.foreachRDD((rdd, time) => { rdd.foreachPartition(partition => { Redis.init(confMap) val jedis = Redis.manager.getResource val pipe = jedis.pipelined partition.foreach(record => { val seq = record.toSeq(schema) val ts = time.milliseconds / 1000 val hkey = seq.take(seq.size - 1).mkString(".") pipe.hset(qid + "." + ts, hkey, seq(seq.size - 1).toString) pipe.expire(qid + "." + ts, redisExpireSec) }) pipe.sync Redis.manager.returnResource(jedis) }) }) ssc.start() ssc.awaitTermination() ssc.stop() } }
Example 4
Source File: ZookeeperSchemaRegistry.scala From affinity with Apache License 2.0 | 5 votes |
package io.amient.affinity.avro import com.typesafe.config.Config import io.amient.affinity.avro.ZookeeperSchemaRegistry.ZkAvroConf import io.amient.affinity.avro.record.AvroSerde import io.amient.affinity.avro.record.AvroSerde.AvroConf import io.amient.affinity.core.config.CfgStruct import io.amient.affinity.core.util.{ZkClients, ZkConf} import org.I0Itec.zkclient.ZkClient import org.I0Itec.zkclient.exception.ZkNodeExistsException import org.apache.avro.Schema import org.apache.zookeeper.CreateMode import scala.collection.JavaConverters._ object ZookeeperSchemaRegistry { object ZkAvroConf extends ZkAvroConf { override def apply(config: Config) = new ZkAvroConf().apply(config) } class ZkAvroConf extends CfgStruct[ZkAvroConf](classOf[AvroConf]) { val ZooKeeper = struct("schema.registry.zookeeper", new ZkConf, true) val ZkRoot = string("schema.registry.zookeeper.root", "/affinity-schema-registry") .doc("znode under which schemas will be stored") } } class ZookeeperSchemaRegistry(zkRoot: String, zk: ZkClient) extends AvroSerde with AvroSchemaRegistry { def this(conf: ZkAvroConf) = this(conf.ZkRoot(), { val zk = ZkClients.get(conf.ZooKeeper) val zkRoot = conf.ZkRoot() if (!zk.exists(zkRoot)) zk.createPersistent(zkRoot) val zkSchemas = s"$zkRoot/schemas" if (!zk.exists(zkSchemas)) zk.createPersistent(zkSchemas) val zkSubjects = s"$zkRoot/subjects" if (!zk.exists(zkSubjects)) zk.createPersistent(zkSubjects) zk }) def this(_conf: AvroConf) = this { new ZkAvroConf().apply(_conf) } override def close(): Unit = ZkClients.close(zk) override protected def registerSchema(subject: String, schema: Schema): Int = hypersynchronized { val zkSubject = s"$zkRoot/subjects/$subject" val zkSchemas = s"$zkRoot/schemas" val versions: Map[Schema, Int] = if (!zk.exists(zkSubject)) Map.empty else { zk.readData[String](zkSubject) match { case some => some.split(",").toList.map(_.toInt).map { case id => getSchema(id) -> id }.toMap } } versions.get(schema).getOrElse { validator.validate(schema, versions.map(_._1).asJava) val schemaPath = zk.create(s"$zkSchemas/", schema.toString(true), CreateMode.PERSISTENT_SEQUENTIAL) val id = schemaPath .substring(zkSchemas.length + 1).toInt val updatedVersions = versions.map(_._2).toList :+ id if (zk.exists(zkSubject)) { zk.writeData(zkSubject, updatedVersions.mkString(",")) } else { zk.create(zkSubject, updatedVersions.mkString(","), CreateMode.PERSISTENT) } id } } private def hypersynchronized[X](f: => X): X = synchronized { val lockPath = zkRoot + "/lock" var acquired = 0 do { try { zk.createEphemeral(lockPath) acquired = 1 } catch { case _: ZkNodeExistsException => acquired -= 1 if (acquired < -100) { throw new IllegalStateException("Could not acquire zk registry lock") } else { Thread.sleep(500) } } } while (acquired != 1) try f finally zk.delete(lockPath) } }
Example 5
Source File: EmbeddedKafkaServer.scala From affinity with Apache License 2.0 | 5 votes |
package io.amient.affinity.kafka import java.io.File import java.util.Properties import java.util.concurrent.TimeUnit import kafka.server.{KafkaConfig, KafkaServerStartable} import kafka.zk.BrokerIdZNode import org.I0Itec.zkclient.ZkClient import org.I0Itec.zkclient.serialize.ZkSerializer import org.apache.kafka.clients.admin.{AdminClient, NewTopic} import org.apache.kafka.common.network.ListenerName import org.apache.kafka.common.security.auth.SecurityProtocol import org.slf4j.LoggerFactory import scala.collection.JavaConverters._ import scala.collection.mutable trait EmbeddedKafkaServer extends EmbeddedService with EmbeddedZookeperServer { private val log = LoggerFactory.getLogger(classOf[EmbeddedKafka]) def numPartitions: Int private val embeddedKafkaPath = new File(testDir, "local-kafka-logs") private val kafkaConfig = new KafkaConfig(new Properties { put("broker.id", "1") put("host.name", "localhost") put("port", "0") put("log.dir", embeddedKafkaPath.toString) put("num.partitions", numPartitions.toString) put("auto.create.topics.enable", "false") put("delete.topic.enable", "true") put("zookeeper.connect", zkConnect) put("offsets.topic.replication.factor", "1") }) private val kafka = new KafkaServerStartable(kafkaConfig) kafka.startup() lazy val admin = AdminClient.create(Map[String, AnyRef]("bootstrap.servers" -> kafkaBootstrap).asJava) def createTopic(name: String): Unit = { admin.createTopics(List(new NewTopic(name, numPartitions, 1)).asJava).all().get(30, TimeUnit.SECONDS) } def listTopics: mutable.Set[String] = { admin.listTopics().names().get(1, TimeUnit.SECONDS).asScala } val tmpZkClient = new ZkClient(zkConnect, 5000, 6000, new ZkSerializer { def serialize(o: Object): Array[Byte] = o.toString.getBytes override def deserialize(bytes: Array[Byte]): Object = new String(bytes) }) val broker = BrokerIdZNode.decode(1, tmpZkClient.readData[String]("/brokers/ids/1").getBytes("utf-8")).broker val kafkaBootstrap = broker.brokerEndPoint(ListenerName.forSecurityProtocol(SecurityProtocol.PLAINTEXT)).connectionString() tmpZkClient.close log.info(s"Embedded Kafka $kafkaBootstrap, data dir: $testDir") abstract override def close(): Unit = try kafka.shutdown finally super.close }
Example 6
Source File: KafkaAdminUtils.scala From gimel with Apache License 2.0 | 5 votes |
package com.paypal.gimel.common.storageadmin import java.util.Properties import kafka.admin._ import kafka.server.ConfigType import kafka.utils.ZkUtils import org.I0Itec.zkclient.{ZkClient, ZkConnection} import org.I0Itec.zkclient.exception.ZkMarshallingError import org.I0Itec.zkclient.serialize.ZkSerializer import org.apache.kafka.common.security.JaasUtils import com.paypal.gimel.logger.Logger object KafkaAdminUtils { val logger = Logger() val isSecurityEnabled = JaasUtils.isZkSecurityEnabled() val sessionTimeOutInMs: Int = 10 * 1000 val connectionTimeOutInMs: Int = 10 * 1000 val zkClient: (String) => ZkClient = new ZkClient(_: String, sessionTimeOutInMs, connectionTimeOutInMs, GimelZKStringSerializer) val zkConnection: (String) => ZkConnection = new ZkConnection(_: String, sessionTimeOutInMs) def isTopicExists(zookKeeperHostAndPort: String, kafkaTopicName: String): Boolean = { def MethodName: String = new Exception().getStackTrace().apply(1).getMethodName() logger.info(" @Begin --> " + MethodName) val client = zkClient(zookKeeperHostAndPort) val connect = zkConnection(zookKeeperHostAndPort) val zkUtil: ZkUtils = new ZkUtils(client, connect, isSecurityEnabled) val result = AdminUtils.topicExists(zkUtil, kafkaTopicName) connect.close() result } } object GimelZKStringSerializer extends ZkSerializer { @throws(classOf[ZkMarshallingError]) def serialize(data: Object): Array[Byte] = { data.asInstanceOf[String].getBytes("UTF-8") } @throws(classOf[ZkMarshallingError]) def deserialize(bytes: Array[Byte]): Object = { if (bytes == null) { null } else { new String(bytes, "UTF-8") } } }
Example 7
Source File: Storage.scala From zipkin-mesos-framework with Apache License 2.0 | 5 votes |
package net.elodina.mesos.zipkin.storage import java.io.{File, FileWriter} import org.I0Itec.zkclient.ZkClient import org.I0Itec.zkclient.exception.ZkNodeExistsException import org.I0Itec.zkclient.serialize.ZkSerializer import play.api.libs.json.{Json, Reads, Writes} import scala.io.Source trait Storage[T] { def save(value: T)(implicit writes: Writes[T]) def load(implicit reads: Reads[T]): Option[T] } case class FileStorage[T](file: String) extends Storage[T] { override def save(value: T)(implicit writes: Writes[T]) { val writer = new FileWriter(file) try { writer.write(Json.stringify(Json.toJson(value))) } finally { writer.close() } } override def load(implicit reads: Reads[T]): Option[T] = { if (!new File(file).exists()) None else Json.parse(Source.fromFile(file).mkString).asOpt[T] } } case class ZkStorage[T](zk: String) extends Storage[T] { val (zkConnect, path) = zk.span(_ != '/') createChrootIfRequired() private def createChrootIfRequired() { if (path != "") { val client = zkClient try { client.createPersistent(path, true) } finally { client.close() } } } private def zkClient: ZkClient = new ZkClient(zkConnect, 30000, 30000, ZKStringSerializer) override def save(value: T)(implicit writes: Writes[T]) { val client = zkClient val json = Json.stringify(Json.toJson(value)) try { client.createPersistent(path, json) } catch { case e: ZkNodeExistsException => client.writeData(path, json) } finally { client.close() } } override def load(implicit reads: Reads[T]): Option[T] = { val client = zkClient try { Option(client.readData(path, true).asInstanceOf[String]).flatMap(Json.parse(_).asOpt[T]) } finally { client.close() } } } private object ZKStringSerializer extends ZkSerializer { def serialize(data: Object): Array[Byte] = data.asInstanceOf[String].getBytes("UTF-8") def deserialize(bytes: Array[Byte]): Object = { if (bytes == null) null else new String(bytes, "UTF-8") } }
Example 8
Source File: MetricsUtil.scala From Swallow with Apache License 2.0 | 5 votes |
package com.intel.hibench.common.streaming.metrics import com.intel.hibench.common.streaming.Platform import kafka.admin.AdminUtils import kafka.utils.ZKStringSerializer import org.I0Itec.zkclient.ZkClient object MetricsUtil { val TOPIC_CONF_FILE_NAME = "metrics_topic.conf" def getTopic(platform: Platform, sourceTopic: String, producerNum: Int, recordPerInterval: Long, intervalSpan: Int): String = { val topic = s"${platform}_${sourceTopic}_${producerNum}_${recordPerInterval}" + s"_${intervalSpan}_${System.currentTimeMillis()}" println(s"metrics is being written to kafka topic $topic") topic } def createTopic(zkConnect: String, topic: String, partitions: Int): Unit = { val zkClient = new ZkClient(zkConnect, 6000, 6000, ZKStringSerializer) try { AdminUtils.createTopic(zkClient, topic, partitions, 1) while (!AdminUtils.topicExists(zkClient, topic)) { Thread.sleep(100) } } catch { case e: Exception => throw e } finally { zkClient.close() } } }
Example 9
Source File: KafkaCollector.scala From Swallow with Apache License 2.0 | 5 votes |
package com.intel.hibench.common.streaming.metrics import java.io.{FileWriter, File} import java.util.Date import java.util.concurrent.{TimeUnit, Future, Executors} import com.codahale.metrics.{UniformReservoir, Histogram} import kafka.utils.{ZKStringSerializer, ZkUtils} import org.I0Itec.zkclient.ZkClient import scala.collection.mutable.ArrayBuffer class KafkaCollector(zkConnect: String, metricsTopic: String, outputDir: String, sampleNumber: Int, desiredThreadNum: Int) extends LatencyCollector { private val histogram = new Histogram(new UniformReservoir(sampleNumber)) private val threadPool = Executors.newFixedThreadPool(desiredThreadNum) private val fetchResults = ArrayBuffer.empty[Future[FetchJobResult]] def start(): Unit = { val partitions = getPartitions(metricsTopic, zkConnect) println("Starting MetricsReader for kafka topic: " + metricsTopic) partitions.foreach(partition => { val job = new FetchJob(zkConnect, metricsTopic, partition, histogram) val fetchFeature = threadPool.submit(job) fetchResults += fetchFeature }) threadPool.shutdown() threadPool.awaitTermination(30, TimeUnit.MINUTES) val finalResults = fetchResults.map(_.get()).reduce((a, b) => { val minTime = Math.min(a.minTime, b.minTime) val maxTime = Math.max(a.maxTime, b.maxTime) val count = a.count + b.count new FetchJobResult(minTime, maxTime, count) }) report(finalResults.minTime, finalResults.maxTime, finalResults.count) } private def getPartitions(topic: String, zkConnect: String): Seq[Int] = { val zkClient = new ZkClient(zkConnect, 6000, 6000, ZKStringSerializer) try { ZkUtils.getPartitionsForTopics(zkClient, Seq(topic)).flatMap(_._2).toSeq } finally { zkClient.close() } } private def report(minTime: Long, maxTime: Long, count: Long): Unit = { val outputFile = new File(outputDir, metricsTopic + ".csv") println(s"written out metrics to ${outputFile.getCanonicalPath}") val header = "time,count,throughput(msgs/s),max_latency(ms),mean_latency(ms),min_latency(ms)," + "stddev_latency(ms),p50_latency(ms),p75_latency(ms),p95_latency(ms),p98_latency(ms)," + "p99_latency(ms),p999_latency(ms)\n" val fileExists = outputFile.exists() if (!fileExists) { val parent = outputFile.getParentFile if (!parent.exists()) { parent.mkdirs() } outputFile.createNewFile() } val outputFileWriter = new FileWriter(outputFile, true) if (!fileExists) { outputFileWriter.append(header) } val time = new Date(System.currentTimeMillis()).toString val count = histogram.getCount val snapshot = histogram.getSnapshot val throughput = count * 1000 / (maxTime - minTime) outputFileWriter.append(s"$time,$count,$throughput," + s"${formatDouble(snapshot.getMax)}," + s"${formatDouble(snapshot.getMean)}," + s"${formatDouble(snapshot.getMin)}," + s"${formatDouble(snapshot.getStdDev)}," + s"${formatDouble(snapshot.getMedian)}," + s"${formatDouble(snapshot.get75thPercentile())}," + s"${formatDouble(snapshot.get95thPercentile())}," + s"${formatDouble(snapshot.get98thPercentile())}," + s"${formatDouble(snapshot.get99thPercentile())}," + s"${formatDouble(snapshot.get999thPercentile())}\n") outputFileWriter.close() } private def formatDouble(d: Double): String = { "%.3f".format(d) } }
Example 10
Source File: KafkaConsumer.scala From Swallow with Apache License 2.0 | 5 votes |
package com.intel.hibench.common.streaming.metrics import java.util.Properties import kafka.api.{OffsetRequest, FetchRequestBuilder} import kafka.common.ErrorMapping._ import kafka.common.TopicAndPartition import kafka.consumer.{ConsumerConfig, SimpleConsumer} import kafka.message.MessageAndOffset import kafka.utils.{ZKStringSerializer, ZkUtils, Utils} import org.I0Itec.zkclient.ZkClient class KafkaConsumer(zookeeperConnect: String, topic: String, partition: Int) { private val CLIENT_ID = "metrics_reader" private val props = new Properties() props.put("zookeeper.connect", zookeeperConnect) props.put("group.id", CLIENT_ID) private val config = new ConsumerConfig(props) private val consumer = createConsumer private val earliestOffset = consumer .earliestOrLatestOffset(TopicAndPartition(topic, partition), OffsetRequest.EarliestTime, -1) private var nextOffset: Long = earliestOffset private var iterator: Iterator[MessageAndOffset] = getIterator(nextOffset) def next(): Array[Byte] = { val mo = iterator.next() val message = mo.message nextOffset = mo.nextOffset Utils.readBytes(message.payload) } def hasNext: Boolean = { @annotation.tailrec def hasNextHelper(iter: Iterator[MessageAndOffset], newIterator: Boolean): Boolean = { if (iter.hasNext) true else if (newIterator) false else { iterator = getIterator(nextOffset) hasNextHelper(iterator, newIterator = true) } } hasNextHelper(iterator, newIterator = false) } def close(): Unit = { consumer.close() } private def createConsumer: SimpleConsumer = { val zkClient = new ZkClient(zookeeperConnect, 6000, 6000, ZKStringSerializer) try { val leader = ZkUtils.getLeaderForPartition(zkClient, topic, partition) .getOrElse(throw new RuntimeException( s"leader not available for TopicAndPartition($topic, $partition)")) val broker = ZkUtils.getBrokerInfo(zkClient, leader) .getOrElse(throw new RuntimeException(s"broker info not found for leader $leader")) new SimpleConsumer(broker.host, broker.port, config.socketTimeoutMs, config.socketReceiveBufferBytes, CLIENT_ID) } catch { case e: Exception => throw e } finally { zkClient.close() } } private def getIterator(offset: Long): Iterator[MessageAndOffset] = { val request = new FetchRequestBuilder() .addFetch(topic, partition, offset, config.fetchMessageMaxBytes) .build() val response = consumer.fetch(request) response.errorCode(topic, partition) match { case NoError => response.messageSet(topic, partition).iterator case error => throw exceptionFor(error) } } }