CFS shares bandwidth fairly between different concurrent workloads in a way that gives interactive workloads appealing low latencies. Real-time means meeting a deadline, which sounds like, but is not same as, low latency. As CFS does not offer deadline, it is not suited for real-time. I suggest you look into SCHED_DEADLINE scheduler. It is a fairly good general purpose real-time scheduler for periodic or sporadic tasks with deadlines.
SCHED_DEADLINE tasks have the highest priority of all and thus pre-empt all other tasks. SCHED_RR and SCHED_FIFO are scheduled according to priority 1 to 99, where larger number pre-empts lower priorities. SCHED_OTHER is priority 0, which is lower than the previous and therefore this CFS scheduler gets only CPU as left over from real-time tasks. Real-time schedulers can allocate at most 95% of CPU bandwidth leaving SCHED_OTHER tasks 5% of bandwidth (unless changed via sysctl). There are also SCHED_BATCH and SCHED_IDLE, which tell scheduler to give different disadvantages compared SCHED_OTHER. The Linux man page sched(7) gives more details.