1

I have a question around which is preferred and seen as more right approach.

Out company's messaging solution of choice is Kafka. We have a task to build a service that would provide events in cloud environment via HTTP(no port opening, widely used - easy to get clients onboarded). Events originate from company's own datacenters.

Now the performance requirement is small as we will be delivering around 5000 events a day.

To implement that there are few options:

1) Define simple Rest API we think is best, abstract underlying messaging mechanism so that other teams can integrate without depending on our implementation details. Then we can start for example with relational DB in cloud to store events.

Pros:

  • Other services do not know about our implementation
  • We can choose how we implement it and change later
  • Simple API - just enough to provide what is needed
  • By not reusing alredy build Kafka cluster we do not have single point of failure within a team - if kafka fails for some reason that was build for other project - we are not affected.

Cons:

  • Could be (we not 100% sure) Slightly longer than Option 2
  • We are reimplementing messaging

2) Reuse already build kafka cluster by other subteam in cloud and put Kafka rest proxy on top and expose events. That results in our consumers talking in Kafka language.

Pros:

  • Possibly it will be delivered faster
  • We have already Kafka cluster

Cons:

  • Learning of Kafka
  • Coupling clients to our internal mechanisms
  • Kafka as a single point of failure

Now the question is - what do you think is right thing to do?

Eds
  • 117
  • 2
  • 2
    How do you define "right?" – Robert Harvey Jan 18 '18 at 21:15
  • Doesn't matter about internal stuff, but to external world, expose a protocol that's simple and expected to stay mainstream for considerable time. And there, I see HTTP beating Kafka language. – S.D. Jan 19 '18 at 06:06
  • @RobertHarvey "right" is what would you feel would be right given your experience and knowledge of systems design and architecture best practices. Happy to answer any specific question that would help you have better understanding before you can tell what you think. – Eds Jan 19 '18 at 14:51
  • I feel like you've already adequately identified the pros and cons, and you now need to make a choice based on those pros and cons. See [If there are two ways of approaching a task, how should one choose between them?](https://softwareengineering.stackexchange.com/q/351356) – Robert Harvey Jan 19 '18 at 15:38

0 Answers0