Hi, I wanted to try out KinesisIO with enhanced fanout for a PoC I was
working on, so I ended up submitting that as
https://github.com/apache/beam/pull/9899.

But since that still needs work to be fully functional (right now it does
not handle resharding), I figured I could at least contribute the updates
to make KinesisIO compatible with the AWS SDK v2, so I split that out and
submitted it as: https://github.com/apache/beam/pull/11318.

Now some totally reasonable concerns have been raised about maintaining two
separate codebases, and having to dual-commit every bugfix or feature
enhancement. That seems to already be the case for all of the other AWS IOs
in amazon-web-services2 (dynamodb, sns, sqs), but do we want to continue
that trend? What do members of the community think?

One solution is obviously to rewrite the AWS IOs with an added abstraction
layer so that the SDK-specific code can be factored out. However, the
KinesisIO class itself already has dependencies on the v1 AWS SDK so I'm
not aware of a way that this could be done so that it's
backwards-compatible. This means that everyone currently using KinesisIO
would most likely have to update their code to use the new interface
whether they wanted to use the new v2 SDK or continue to use v1. I think a
rewrite would also be a non-trivial task with more than a few details to be
worked out first.

>From my perspective, the options are:

- Merge #11318 now and the community can use the v2 AWS SDK with KinesisIO
and I can continue working on enhanced fanout while a rewrite is being
worked on, but the community now has to dual-commit any changes to
KinesisIO.
- Close #11318 and continue working on #9899 and I alone have to
dual-commit the changes until it can be merged, at which point everyone can
use enhanced fanout while the rewrite is being worked on. Then the
community will also have to dual-commit but only after enhanced fanout is
available.
- Close both PRs and just wait for a rewrite, and no one can use the v2 AWS
SDK or enhanced fanout in KinesisIO until after it's done. (Not to imply
that I wouldn't be interested in contributing to that effort, just for the
sake of these 2 PRs.)
- Don't do the rewrite at all and just live with dual-committing until the
KinesisIO based on the v1 SDK reaches its end of life. No one has to update
their code to continue using the v1 SDK, only if they want to move to v2.

There may be other options or considerations I'm missing here. What do
others think?

Thanks,
Jonothan

Reply via email to