Hi All,
after finishing my pull request that should fix the problems with the
synchronisation of checkpoints and element emission (the reason for
the faulty results of the exactly-once tests) I discovered that the
Kafka source does not deal well with being interrupted. We recently
changed the SourceFunction to the reachedEnd()/next() interface, with
the contract that the source must be interruptible to be able to
perform checkpoints. Now this doesn't seem to work with Kafka. I added
another Source interface in my PR
(https://github.com/apache/flink/pull/742). This is similar to the old
interface of run()/cancel(), with the addition that the source must
acquire a lock before updating state and emitting elements. The update
of state and the emission of elements must happen in the same
synchronized block to ensure consistency. This seems to solve the
problem but now we have two source interfaces.

The question is now. What do you think about the two interfaces?
Should we keep both? Remove one?

Cheers,
Aljoscha

Reply via email to