Whatever done on producer side, still the best way we believe to deliver exactly once from kafka is to handle it on consumer side:
- Produce msg with a uuid as the Kafka message Key into topic T1
- consumer side read the msg from T1, write it on hbase with uuid as rowkey
- read back from hbase with the same rowkey and write to another topic T2
- have your end consumers actually consume from topic T2