@Override
  public void describe(TaskApplicationDescriptor appDescriptor) {
    // add input and output streams
    KafkaSystemDescriptor ksd = new KafkaSystemDescriptor("tracking");
    KafkaInputDescriptor<String> isd = ksd.getInputDescriptor("myinput", new StringSerde());
    KafkaOutputDescriptor<String> osd = ksd.getOutputDescriptor("myout", new StringSerde());
    TableDescriptor td = new RocksDbTableDescriptor("mytable",
        new KVSerde(new NoOpSerde(), new NoOpSerde()));

    appDescriptor
        .withInputStream(isd)
        .withOutputStream(osd)
        .withTable(td)
        .withTaskFactory((StreamTaskFactory) () -> new MyStreamTask());
  }
Test example of a low-level API application (i.e. {@link TaskApplication})
samza-test/src/main/java/org/apache/samza/example/TaskApplicationExample.java