We are planning to replace IBM MQ with Apache Kafka to implement pub-sub use-cases in future. Currently Mainframe(running Z/OS) applications are written using COBOL programming language & pushing messages to MQ. I went through the documentation to find out about Clients supported by Kafka and seems, it doesn't support COBOL.
What's the best approach to build producer on Mainframe and publish messages directly to Kafka topics with minimal change in existing applications ?
Lots of options. You can publish to Kafka using any REST/HTTP client in any language. You can leave WebSphere MQ on zOS and run an external Kafka Source Connector to pull from MQ and put into Kafka. You can write to DB2 or another database and use a number of CDC tools (including IBM InfoSphere) to send the database updates to Kafka. You can use the Confluent JMS client to publish using Java. You can help finish the work to get librdkafka C client to run native on zOS. You could use Datapower as an ESB gateway between your mainframe app and Kafka via the Confluent REST Proxy. It all depends on your use case which option is best.
Some Links of interests:
Confluent Kafka JMS Client http://docs.confluent.io/current/clients/kafka-jms-client/docs/index.html
DataMountaineer Kafka Connectors for JMS Source: http://docs.datamountaineer.com/en/latest/jms-source.html