Github user paul-rogers commented on a diff in the pull request: https://github.com/apache/drill/pull/1027#discussion_r151584017 --- Diff: contrib/storage-kafka/src/main/java/org/apache/drill/exec/store/kafka/decoders/MessageReaderFactory.java --- @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.drill.exec.store.kafka.decoders; + +import org.apache.drill.common.exceptions.UserException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.base.Preconditions; + +public class MessageReaderFactory { + + private static final Logger logger = LoggerFactory.getLogger(MessageReaderFactory.class); + + /** + * Initialize kafka message reader beased on store.kafka.record.reader session + * property + * + * @param messageReaderKlass + * value of store.kafka.record.reader session property + * @return kafka message reader + * @throws UserException + * in case of any message reader initialization + */ + public static MessageReader getMessageReader(String messageReaderKlass) { + Preconditions.checkNotNull(messageReaderKlass, "Please set store.kafka.record.reader " + messageReaderKlass); + MessageReader messageReader = null; + try { + Class<?> klass = Class.forName(messageReaderKlass); --- End diff -- In general, I am in favor of dynamically loading classes. However, I'm a bit less in favor of requiring that users know detailed class names at runtime. I wonder if you can do this: * In the config system, provide a mapping of reader name to reader class. * In the session/system option, provide the reader name. * Here, use the name to look up the class name, which we then instantiate as in this existing code. That way, I can specify "json" as the reader format, not "org.apache.drill.exec.store.kafka.decoders.JsonMessageReader"...
---